父类和子类具有相同的变量“名称”,已通过继承方法-父类中的getName()访问了
class A {
String name = "A";
String getName() {
return name;
}
String greeting() {
return "Class A";
}
}
class B extends A {
String name = "B";
String greeting() {
return "Class B";
}
}
public class Client {
public static void main(String[] args) {
A a = new A();
B b = new B();
System.out.println(a.greeting() + " has name " + a.getName());
System.out.println(b.greeting() + " has name " + b.getName());
}
}
输出:
A类的名称为A
B类的名称为A
在上面的代码段中,b.getName()使用子类引用对其进行访问,但将输出返回为“ A”。有人可以解释一下吗?
注意: 我已经访问了此链接-Overriding member variables in Java ( Variable Hiding),在该链接中,使用引用直接访问变量。在上面的给定代码段中,可以通过继承的方法对其进行访问,该方法使用父类变量来生成输出,尽管可以通过“子类引用”和“子类对象”进行调用。
答案 0 :(得分:0)
参考-https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#d5e10238 部分-示例8.3.1.1-3
B类现在有两个变量
假定以下类引用:
A a = new A();
B b = new B();
super.name
或a.name
或a.getName()
b.name
或覆盖类B中的getName()方法考虑到给定的代码段