这是一个简单的例子,我继承了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
。它背后的原因是什么?
答案 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
}
}