考虑以下代码:
class Person {
String className = "Person";
void printClassName () {
System.out.println("I am " + this.className);
System.out.println("I am " + this.getClass().getSimpleName());
}
}
class Employee extends Person {
// intentionally hiding this field
String className = "Employee";
}
public class App {
public static void main(String[] args) {
Employee raghu = new Employee ();
raghu.printClassName();
}
}
我有几个问题。
创建子类的对象时,实际创建了多少个对象?只有一个,通过引入子类中定义的新属性来扩展超类的属性?或者两个,我们可以访问的子类对象和一个超类对象,它们的存在对我们来说是隐藏的?
如果创建了两个对象,当在子类对象上调用非覆盖方法时,哪个对象负责?换句话说,
this非覆盖方法内部指的是什么?隐藏的超类对象还是子类对象?如果您对#2 的回答是超类的隐藏对象,那么为什么上面的代码会打印
"I am Employee"为System.out.println("I am " + getClass().getSimpleName());insideprintClassName。printClassName如果您对#2 的回答是子类的对象,那么为什么打印里面的第一行"I am Person"?