【发布时间】:2023-01-11 19:45:15
【问题描述】:
我有 2 个类,A 和 B,B 继承自 A。 这两个类都有一个名为 w 的 int 类型的属性。
在 A 类中 w 是公共的,在 B 类中 w 是私有的。
我使用 B 构造函数创建了一个 A 类型的对象 - A a = new B()
然而,当我试图访问 B 的属性时,我发现我只能访问类 A 的变量或方法,即使我创建了一个 B 类型的对象。
我认为这只有在两个类没有相同的方法或变量时才有意义。 但在这种情况下,两个类都有一个名为 w 的变量,但我只能访问存储在 A 类中的值。为什么会这样?
A类
public class A {
public int w;
private static String str = "K";
public A() {
str+="B";
w+=str.length();
str+=w;
}
@Override
public String toString() {
return str.charAt(w-2)+"P";
}
}
B类
public class B extends A {
public static int w = 2;
private String str = "W";
public B(int x) {
w+=super.w;
str+=super.toString()+w;
}
@Override
public String toString() {
return super.toString() + str;
}
}
测试类
public class Q1 {
public static void main(String[] args) {
A a = new A();
A a2 = new B(1);
System.out.println(a);
System.out.println(a.w);
System.out.println(a2);
System.out.println(a2.w);
B b = new B(2);
System.out.println(b);
}
}
【问题讨论】:
-
帮助我们帮助您——与其描述问题,不如分享一个证明问题的minimal reproducible example
-
当您在
A的引用上调用方法时,比如a.doSomething();,编译器将检查该方法是否存在于A中。分配的对象是否封装了该方法并不重要,检查是在编译时完成的,而转换是在运行时发生的。 -
请删除代码的屏幕截图并显示实际代码。
标签: java oop inheritance upcasting