2017-10-11 102 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()); 
     }