2017-10-11 103 views
1

如何获取有关抽象父类中子类重写方法信息的信息。 例子:如何在抽象父类中获取子类的覆盖内容信息

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

+0

我不明白你的问题。你的意思是如何检查方法是否被覆盖? – user3437460

+0

一些额外的具体细节将有助于理解您遇到的问题。一般来说,在一个好的设计中,'A'应该总是假定它的子类具有所有方法的有效实现。这就是合同的要点!如果'a1'只适用于某些'A'的子类,则很可能使用'a1'的逻辑推送到需要它的子类。 –

回答

1

,你可以做以下玩弄(通过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()); 
     }