2016-11-22 231 views
0

我有一個場景,我想根據某個條件從一個類重寫基類的構造函數創建與子類。使用反射覆蓋超類構造函數與基類構造函數

所以下面是類: 1)參考 2)其他(基類) 3)OtherImpl(兒童類其他的) 4)RefWorking(主類)

類參考正在呼叫的構造其他類,我想用OtherImpl的構造函數重載此構造函數。

class Ref { 

    private String s = "Original"; 
    private Other o; 

    public Ref() { 
    } 

    public void method1(int a) { 
     o = new Other(); 
     System.out.println("Method 1 : "+ s); 
    } 

    private void method2(String a) { 
     System.out.println("Method 2 : "+ a); 
    } 
} 

class Other { 

    public Other() { 
     System.out.println("Default Other Constructor"); 
    } 
} 


class OtherImpl extends Other { 

    public OtherImpl() { 
     System.out.println("Reflection Constructor"); 
    } 
} 

public class RefWorking { 

    public static void main(String args[]) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException { 
     Ref r = new Ref(); 

     Class c = r.getClass(); 

     OtherImpl oi = new OtherImpl(); 

     Field f = c.getDeclaredField("o"); 
     f.setAccessible(true); 
     f.set(r, oi); 

     r.method1(10); 
    } 
} 

這是給下面的輸出:

默認其他構造 反射構造 默認其他構造 方法1:原始

但我的預期成果是: 默認其他構造 反射構造 默認其他構造函數 反射構造函數 方法1:原始

回答

0

恐怕你不能覆蓋base class constructor,爲 OtherImpl class不能繼承構造Other Class何況覆蓋它。


和這篇文章可能會幫助你。 Is Constructor Overriding Possible?