【发布时间】:2018-07-05 09:44:25
【问题描述】:
我已经了解 java 有一段时间了,但有时我认为,我缺乏一些基本概念。这是我正在尝试运行的代码:
class A{
int x =10;
void al(){
System.out.println("From a");
}
}
class B extends A{
int x = 20;
void al(){
System.out.println("From b");
}
public static void main(String args[]){
A obj = new B();
B obj1 = new B();
A obj2 = new A();
System.out.println(obj.x);
obj.al();
System.out.println(obj1.x);
System.out.println(obj2.x);
}
}
这是输出:
10
From b
20
10
当我尝试调用函数 al 时,它会调用 B 类中的函数。这里发生了简单的覆盖。 Obj 尝试先在基类中查找,然后在超类中查找。 现在,当我尝试通过对象 obj 访问“X”时,它显示“10”。 为什么不显示“20”?
【问题讨论】:
-
因为 A.x 和 B.x 是不同的野兽,因为 B 重新声明 x
-
您需要参考继承中的向上转换和向下转换等概念,这就是这里发生的事情
-
Java 中不存在属性覆盖
标签: java