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

时间:2011-05-02 05:25:58

标签: java oop

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();
    }
}

2 个答案:

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