有没有一种方法可以展平继承的类以发现哪些函数属于哪个类?

如果您有类似的 class :

public class Person
{
    public String name;

    public void setName(String name){
        this.name = name;
    }

    public String getName(){
        return this.name;
    }
}

还有一个继承的类
public class Worker extends Person
{
    public String job;

    public void setJob(String job){
        this.job = job;
    }

    public String getJob(){
        return this.job;
    }
}

当实例化Worker时,有没有办法发现Set / GetName属于Person类?

我已经看到使用接口来查找此信息的建议,但是我不确定如何最好地使用接口来显示此处的功能关系。是否有一些技巧可以引用继承的类中的特定类?

编辑:

要回答为什么要这样做:我基本上希望能够遍历对象中的方法,并忽略来自某个类的方法,在这种情况下,我想忽略Person类。

我在现实世界中的例子并非如此简单,但是我想不出一种更好的方法来确定哪些方法属于哪个类而不对它们进行“扁平化”。

最佳答案

isBridge类中的Method方法可用于检查该方法是在Person还是Worker类中声明的。

public static void main(String[] args)
{
    Worker worker = new Worker();
    Class clazz = worker.getClass();
    Method[] methods = clazz.getDeclaredMethods();

    for(Method method :methods)
    {
        System.out.println(method.getName()+ " is in Worker: "+ !method.isBridge());
    }
}

上面的代码将产生如下输出:
setName is in Worker: false
getName is in Worker: false
setJob is in Worker: true
getJob is in Worker: true

07-22 04:38