父参考访问父变量

时间:2016-06-27 04:40:22

标签: java oop inheritance

这是一个简单的例子,我继承了class属性。

class Xyz
{
   int a = 10;
} 

public class Demo extends Xyz
{
   int a = 5;

   public static void main( String[] args )
   {

      Xyz z = new Demo();
      System.out.println(z.a);
   }

}

由于对象属于类Demo,因此应打印5,但输出为10。它背后的原因是什么?

3 个答案:

答案 0 :(得分:2)

对于java中的变量,变量只能使用它们的引用变量来访问,而不是关于对象。

<span>Choose an effect:</span>
<div class="custom-select">
		<select name="select" id="select-effect">
<option value="1" selected>Triple Swoosh</option> 
<option value="2">Simple</option>
<option value="3">Duo Move</option>
<option value="4">Content Move</option>
		</select>
</div>
由于压倒一切,可能引起另一种混乱。但是你应该明白,覆盖只发生在Method for for Variables的上下文中。

因此,请注意您的输出是正确的。它应该是10而不是5。

谢谢

答案 1 :(得分:0)

如果要访问对象的成员变量,则始终访问声明对象的类型的变量。

在您的基类int a = 10;中注释掉Xyz。你的代码不再编译......

这种方法不同,默认情况下是虚拟的(除非是私有的):

class Xyz
{
    int m()
    {
        return 10;
    }
} 

public class Main extends Xyz
{
   int m()
   {
       return 5;
   }

   public static void main( String[] args )
   {
      Xyz z = new Main();
      System.out.println(z.m());
   }
}

因此,如果您想要或甚至依赖于您最初预期的此类行为,请将您的成员变量设为私有并为其提供getter,并且 - 如果需要 - 设置器(当然,您需要在子类中覆盖这些变量!)。

答案 2 :(得分:0)

你真正做的是创建Xyz对象,因此对整数a的引用是根据Xyz。

如果要更改Parent类的值,则应调用super access并更改parent的值

类似这样的事情

class Xyz
{
   int a = 10;
} 

public class Demo extends Xyz
{

   public Demo(){
       super.a = 5;
   }

   public static void main( String[] args )
   {

      Xyz z = new Demo();
      System.out.println(z.a); // 5 is printed
   }

}