Java 给定的数据类型如何影响重写成员变量
我研究了一些关于这个主题的相关文章,我了解到当我们在一个子类中创建一个同名变量时,这叫做隐藏Java 给定的数据类型如何影响重写成员变量,java,oop,Java,Oop,我研究了一些关于这个主题的相关文章,我了解到当我们在一个子类中创建一个同名变量时,这叫做隐藏 class A { int i = 10; public void printValue() { System.out.print("Value-A"); System.out.println(i); } } class B extends A { int i = 12; public void printValue() {
class A {
int i = 10;
public void printValue() {
System.out.print("Value-A");
System.out.println(i);
}
}
class B extends A {
int i = 12;
public void printValue() {
System.out.print("Value-B");
System.out.println(i);
}
}
public class Test {
public static void main(String args[]) {
A a = new B();
a.printValue();
System.out.print(a.i);
}
}
当我用类型A
实例化类别B
并打印成员数据时
A a=new B();
System.out.println(a.i)//The output is `10`.(The value of parent class member data).
但是当我将类B
实例化为类型B
时
B a=new B();
System.out.println(a.i)//The output is 12. (The value of parent class member data)
我想知道它们有什么不同。多态性只适用于方法。变量仍然绑定到类型。您无法验证变量。这就是更改类型时看到不同输出的原因 简单地说,当你写作的时候
A a=new B();
请记住,变量绑定到左侧,方法从右侧执行。变量绑定到引用,而不是创建的对象。在您的示例中,
aaa=newb()
此处a
是类型为a
的变量绑定到的引用。并且,创建的对象是类型B
,方法绑定到该类型。这就是它为引用变量选择值的原因。这称为数据隐藏。因为当我们在子类中创建相同的变量时,子类的变量值隐藏在super
class变量下。希望有帮助。非常接近的问题