这里内部发生了什么?
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
方法。 但由于静态类型a1
是A
导致编译错误。 但是,如果您编写了以下内容,它将编译并运行正常。
((B) a1).show1();
如果这不能回答您的问题,请重新说明,以便我们能够更好地理解它。
发生了你不应该打电话:
a1.show1();
因为即使a1实例类型是B(new B()),您也会将它视为A对象,它没有定义show1方法。