Java:从父类访问子类方法
是否可以从父类访问子类方法?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()没有初始化的子类?
不,不存在:c1
是参考C1
类型的对象的参考。没有可用于欺骗Java的转换,因为它认为它是C2
或C3
。
你会怎么通常做的就是定义一个abstract
功能mSomething
在C1
,实施,在子类的功能,并使用类似
C1 c = new C2();
c.mSomething()
会再打电话,多态,子类中的必需函数。
另一种方法是使m1
和m2
static
,并让他们采取C1
实例作为参数。
谢谢@Bathsheba。我正在寻找一些替代品。目的是将这些方法在三个不同的类中进行逻辑分隔,并从同一点调用所有方法。看起来不可行。 :( –
我已经在最后加入了另一种方法。 – Bathsheba
是的,但这并不能解决我的目的!:( –
使用'super'?即。在'c2.m1()'中调用'super.m1()'它会自动调用c2的父节点中的'm1()'。 [相关](http://stackoverflow.com/questions/3767365/super-in-java) –
不,你不能。想想这种情况,如果C2和C3定义了一个方法m3(),那么当你调用'c1.m3()'时应该调用哪个方法? 'C2.m3()'或'C3.m3'? – diufanman