如何在抽象父类中获取子类的覆盖内容信息
问题描述:
如何获取有关抽象父类中子类重写方法信息的信息。 例子:如何在抽象父类中获取子类的覆盖内容信息
abstract Class A()
{
protected void a1()
{
//some default content
}
protected void a2()
{
//some default content
}
}
class B extends A
{
@Override
public void a1()
{
//overridden content
}
}
Class C extends A
{
@Override
public void a2()
{
//overriden content
}
}
如何获得C类是压倒只有A2和 B类是压倒A1
答
,你可以做以下玩弄(通过refelction)的信息:
java.lang.Class class = B.class; // or any other child class
Class dec = class.getMethod("YourMEthodNAme").getDeclaringClass();
System.out.println(" Declaring class: " + dec.toString());
//你可以检查返回类的动画,如果它是给定方法的A,则方法没有被覆盖,如果它是子类名,则被覆盖
编辑:
你也可以这样做在一个循环:
Method[] m = class.getMethods();
for(int i = 0; i < m.length; i++) {
// returns te declaring class
Class dec = m[i].getDeclaringClass();
// displays all methods
System.out.println("Method = " + m[i].toString());
System.out.println(" Declaring class: " + dec.toString());
}
我不明白你的问题。你的意思是如何检查方法是否被覆盖? – user3437460
一些额外的具体细节将有助于理解您遇到的问题。一般来说,在一个好的设计中,'A'应该总是假定它的子类具有所有方法的有效实现。这就是合同的要点!如果'a1'只适用于某些'A'的子类,则很可能使用'a1'的逻辑推送到需要它的子类。 –