2016-12-02 190 views
0

是否可以从父类访问子类方法?Java:从父类访问子类方法

public class C1 { 
    public C1(){ 
     System.out.println("Constructor C1"); 
    } 
} 

public class C2 extends C1{ 
    public void m1(){ 
     System.out.println("print from m1"); 
    } 
} 

public class C3 extends C1{ 
    public void m2(){ 
     System.out.println("print from m2"); 
    } 
} 

public class TestMain{ 
    public static void main(String[] args){ 
     C1 c1 = new C1(); 
    } 
} 

反正是有访问c1.m1()& c1.m2()没有初始化的子类?

+0

使用'super'?即。在'c2.m1()'中调用'super.m1()'它会自动调用c2的父节点中的'm1()'。 [相关](http://stackoverflow.com/questions/3767365/super-in-java) –

+1

不,你不能。想想这种情况,如果C2和C3定义了一个方法m3(),那么当你调用'c1.m3()'时应该调用哪个方法? 'C2.m3()'或'C3.m3'? – diufanman

回答

1

不,不存在:c1是参考C1类型的对象的参考。没有可用于欺骗Java的转换,因为它认为它是C2C3

你会怎么通常做的就是定义一个abstract功能mSomethingC1实施,在子类的功能,并使用类似

C1 c = new C2();

c.mSomething()会再打电话,多态,子类中的必需函数。

另一种方法是使m1m2static,并让他们采取C1实例作为参数。

+0

谢谢@Bathsheba。我正在寻找一些替代品。目的是将这些方法在三个不同的类中进行逻辑分隔,并从同一点调用所有方法。看起来不可行。 :( –

+0

我已经在最后加入了另一种方法。 – Bathsheba

+0

是的,但这并不能解决我的目的!:( –