如何通过父引用变量访问子类中的方法?

时间:2017-06-03 09:17:34

标签: java

假设你有

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方法。

有人可以帮忙吗?

1 个答案:

答案 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的一个实例,但我希望你明白我的意思。