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

Java 如何通过父引用变量访问子类中的方法?,java,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

假设你有

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 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_父方法


有人能帮忙吗?

首先,在你分配a=新A2之后;你做了一个=新的A3,这样a就不再是A2的实例了

第二,a可以是a的任何实例,它不能确定在那个点上它将是A2。因此,您应该检查此项并进行转换:

if(a instanceof A2){
    A2 a2 = (A2) a;
    System.out.println(a2.a2());
}
在您的代码中,这不会起任何作用,因为a实际上不是A2的实例,但我希望您明白我的意思。

您希望变量a记住它以前的值吗???a的值为新的A4;,它与A2完全无关。我甚至怀疑你是否有权使用a4,因为a是类型a,但没有该名称的方法。
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());
  }
}
if(a instanceof A2){
    A2 a2 = (A2) a;
    System.out.println(a2.a2());
}