假设你有
public class A{
public void a_parent(){
System.out.println("Parent class invoked:");
}
}
作为您的主类,其他4个类继承该类
public class A1 extends A{
public void a1(){
System.out.println("a1 class invoked:");
}
}
public class A2 extends A{
public void a2(){
System.out.println("a2 class invoked:");
}
}
public class A3 extends A{
public void a3(){
System.out.println("a3 class invoked:");
}
}
public class A4 extends A{
public void a4(){
System.out.println("a4 class invoked:");
}
}
在主方法中,我这样称呼它们。
public class TestClasses{
public static void main(String args[]){
A a;
a = new A1();
a = new A2();
a = new A3();
a = new A4();
System.out.println(a.a2());
}
}
当我尝试调用a2方法时,我不能。我只能访问a4和a_parent方法。
有人可以帮忙吗?
答案 0 :(得分:1)
首先,在您指定a = new A2();
后,您执行a = new A3()
,这样就不再是A2的实例了。
其次,a可以是A的任何一个实例,它不能确定在那时它将成为A2。因此,您应该检查并进行演员表:
if(a instanceof A2){
A2 a2 = (A2) a;
System.out.println(a2.a2());
}
在你的代码中,这不会做任何事情,因为它实际上并不是A2的一个实例,但我希望你明白我的意思。