为什么这个程序的输出i = 10?

时间:2015-08-11 08:12:46

标签: java object inheritance extends

class A 
{
    protected int i=10;
}
class B extends A
{
    protected int i=15;
}
public class Test extends B
{
    public static void main(String a[]) 
    {
        A obj=new Test();
        System.out.print("i="+obj.i);
    }
}

它的输出是i=10,但是怎么样?

如何进行对象的内存分配。

4 个答案:

答案 0 :(得分:4)

A obj=new Test();

意思是,您正在访问类A的成员并执行Test(多态)的方法。

我建议你阅读有关继承和多态的官方文档以深入了解。

答案 1 :(得分:2)

多态性链接到对象而不是引用。由于您使用的是A类型的引用,如果您在A.i中使用方法getI()并在A中覆盖它,则会获得B,然后调用{ {1}},然后您将获得obj.getI()的值

答案 2 :(得分:0)

在java中,不存在Variable Overriding。我们有方法Overriding的概念。

在您的代码中

A obj=new Test();

您可以访问A的成员。如果您在两个类(父级和子级)中重写了相同的方法。并且您使用obj调用该方法。这次您将从Child类重写方法获得输出。这是多态性的概念。

答案 3 :(得分:0)

第1行:A =新A();

方法存在将在A类中检查,方法也将从A类调用。

a.g();//A class method will be called
 System.out.print("i="+a.i);//A class i will be accessed

第2行:A b =新B();

方法存在将在A类中检查,方法将从B类调用。

b.g();//B class method will be called and it will also check that it is` available in A also or not if not then compile time error.
System.out.print("i="+b.i);//A class i will be accessed