这里内部发生​​了什么?

class A { int i=10; void show() { System.out.println("show()"); } } class B extends A { int j=20; void show1() { System.out.println("show1()"); } public static void main(String ar[]) { A a1=new B();//What happened internally here.please give me answer. a1.show(); a1.show1(); } } 

 A a1=new B();//What happened internally here.please give me answer. a1.show(); a1.show1(); 

发生的事情是您创建了B的实例并将引用分配给A类型的变量。 没关系,因为B实例 A

在下一行中,您调用了B实例上的A方法之一。 没关系。

在最后一行中,您尝试调用B方法。 但由于静态类型a1A导致编译错误。 但是,如果您编写了以下内容,它将编译并运行正常。

 ((B) a1).show1(); 

如果这不能回答您的问题,请重新说明,以便我们能够更好地理解它。

发生了你不应该打电话:

 a1.show1(); 

因为即使a1实例类型是B(new B()),您也会将它视为A对象,它没有定义show1方法。