给定数据类型效果如何覆盖成员变量
我研究了一些关于这个主题的相关文章,并且我已经了解到,当我们在子类中创建一个相同名称的变量时,这就是所谓的隐藏。
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);
}
}
当我用type A
实例化class B
并打印成员数据时
A a=new B();
System.out.println(a.i)//The output is `10`.(The value of parent class member data).
但是当我将class B
实例化为class B
type 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();
这里a
是对A
类型A
变量绑定的引用。 并且,创建的对象是类型B
,方法绑定到该类型。 这就是为什么它选择参考变量的值。 这被称为数据隐藏。 因为当我们在子类中创建相同的变量时,子类变量的值被隐藏在super
类变量下。 希望能帮助到你。
多态性仅适用于方法。 变量仍然绑定到该类型。 你不能变换变量。 这就是您在更改类型时看到不同输出的原因。
简单地说,当你写
A a=new B();
只要记住,变量绑定到左侧,方法从右侧执行。
链接地址: http://www.djcxy.com/p/59523.html上一篇: How the Given Data type effect Overriding member variables
下一篇: How do I load an variable from a java class to a different class