Java 为什么这段代码打印的是超类的值而不是子类的值
产出:10Java 为什么这段代码打印的是超类的值而不是子类的值,java,inheritance,Java,Inheritance,产出:10 它如何基于上述代码从基类打印值。B已经从a继承了a。做inta=20再次隐藏从a继承的a。这意味着如果x的编译时间为B,则形式为x.a的表达式将仅计算为20 要获得预期行为,可以在B的构造函数中重置a: class A{ int a = 10; } class B extends A{ int a= 20; } public class C { public static void main(String [] args){ A a =
它如何基于上述代码从基类打印值。
B
已经从a
继承了a
。做inta=20
再次隐藏从a
继承的a
。这意味着如果x
的编译时间为B
,则形式为x.a
的表达式将仅计算为20
要获得预期行为,可以在B
的构造函数中重置a
:
class A{
int a = 10;
}
class B extends A{
int a= 20;
}
public class C {
public static void main(String [] args){
A a = new B();
System.out.println(a.a);
}
}
B
已从a
继承a
。做inta=20
再次隐藏从a
继承的a
。这意味着如果x
的编译时间为B
,则形式为x.a
的表达式将仅计算为20
要获得预期行为,可以在B
的构造函数中重置a
:
class A{
int a = 10;
}
class B extends A{
int a= 20;
}
public class C {
public static void main(String [] args){
A a = new B();
System.out.println(a.a);
}
}
当您在一个子类中创建一个同名变量时,就像您在这里所做的那样,它被称为隐藏。生成的子类现在实际上具有这两个属性 请参考下图
当您在子类中创建一个同名变量时,就像您在这里所做的那样,它被称为隐藏。生成的子类现在实际上具有这两个属性 请参考下图
因为被重写的概念只允许在OOPs中使用非变量的方法。你可以用超级关键字隐藏变量。PyMyHypistic只存在函数,而不是变量。如果答案帮助你,请考虑通过点击复选来接受你认为最好的答案。因为重写的概念只允许在OOPs中使用非变量的方法。你可以用超级关键字隐藏变量。PyMyHypistic只存在函数,而不是变量。如果答案帮助你,请考虑通过点击复选来接受你认为最好的答案。或者在当前场景中,确保将对象强制转换为
B
类型,然后访问其变量,如(B)a)。a
。。。只是它会恶化可读性和可访问性。或者在当前场景中,确保将对象强制转换为B
类型,然后访问其变量,如(B)a)。a
。。。只是它会恶化可读性和可访问性。