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();
}
}
答案 0 :(得分:7)
A a1=new B();//What happened internally here.please give me answer.
a1.show();
a1.show1();
发生的事情是您创建了B
的实例,并为A
类型的变量分配了引用。没关系,因为B
实例是 A
。
在下一行中,您调用了A
实例上的B
个方法之一。没关系。
在最后一行中,您尝试调用B
方法。但由于a1
的静态类型为A
,导致编译错误。但是,如果您编写了以下内容,它将编译并运行正常。
((B) a1).show1();
如果这不能回答您的问题,请重新说明,以便我们能够更好地理解它。
答案 1 :(得分:2)
发生了你不应该打电话的事实:
a1.show1();
因为即使a1实例类型是B(new B()),你也把它当作A对象来处理,它没有定义show1方法。