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
,但是怎么样?
如何进行对象的内存分配。
答案 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