看如下Java代码:
public class Main {
public static void main(String[] args) {
Person person = new Student();
System.out.println("Name: "+person.getName()); // --> Guess
person.setName("set outside");
System.out.println("After Name: "+person.getName()); // --> Guess
Student student = (Student)person;
System.out.println("After cast, Name: "+student.getName()); // --> Guess
}
}
class Person {
private String name = "Person name"; // --> (A)
public void setName(String name) {
this.name = name+"_ in superClass";
}
public String getName() {
return this.name;
}
}
class Student extends Person{
private String name = "Student name"; // --> (B)
public void setName(String name) {
this.name = name + "_ in subClass";
}
/*
public String getName() { --> (C)
return this.name;
}
*/
}
运行先猜下三个输出是什么? 接着做如下改动再猜结果: 把(A)处的private改为protected, 把(B)处一行注释掉, 把 (C)处的方法放开.
运行结果怎么? 为什么?