class Person {
private String name="hhhhhhhh";
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}}class Student extends Person {
private String school;
public void setSchool(String school) {
this.school = school;
}
public String getSchool() {
return school;
}
public void getSuper() {
System.out.println("super:"+super.getName());
}
}class TestPerson {
public static void main(String[] args) {
Student student = new Student();
//student.setName("John");//1此句注释掉的话,3行和4行打印的都是:"hhhhhhhh";否则都是"John"。
student.setSchool("SCH");//2
student.getSuper();//3
System.out.println(student.getName());//4
System.out.println(student.getSchool());//5
}
}
//我就不明白了,setName(),貌似操作的是父类的 private String name="hhhhhhhh";。但是既然是继承下来了,那操作的应该是子类的 private String name="hhhhhhhh";。
//所以,1行不注释的话,按理说3行是打印"hhhhhhhh",4行打印:"John"。所以就不明白了。希望大家给个解释,谢谢。。参考帖子:http://www.cn-java.com/www1/bbs/viewthread.php?tid=32130
private String name="hhhhhhhh";
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}}class Student extends Person {
private String school;
public void setSchool(String school) {
this.school = school;
}
public String getSchool() {
return school;
}
public void getSuper() {
System.out.println("super:"+super.getName());
}
}class TestPerson {
public static void main(String[] args) {
Student student = new Student();
//student.setName("John");//1此句注释掉的话,3行和4行打印的都是:"hhhhhhhh";否则都是"John"。
student.setSchool("SCH");//2
student.getSuper();//3
System.out.println(student.getName());//4
System.out.println(student.getSchool());//5
}
}
//我就不明白了,setName(),貌似操作的是父类的 private String name="hhhhhhhh";。但是既然是继承下来了,那操作的应该是子类的 private String name="hhhhhhhh";。
//所以,1行不注释的话,按理说3行是打印"hhhhhhhh",4行打印:"John"。所以就不明白了。希望大家给个解释,谢谢。。参考帖子:http://www.cn-java.com/www1/bbs/viewthread.php?tid=32130
解决方案 »
- 控制台输入带空格的数字 怎么把这些数字放到整形数组里
- new TreeSet<String>(comparator) 不带有参数?这是什么意思呃。谢谢。
- 求思路: 根据不同的客户显示不同的swing界面
- 基于C/S架构的局域网通信工具的服务器具体的设计思路应该是什么样啊?
- 二个日期相隔天数的问题,错在哪里?
- 请问能不能用JAVA代码提取出EXE文件的图标
- 120分 求一简单配置问题 !!!谢谢 !!
- 请问!那里有TOMCAT和BDK下载呀,我下了两个,但都不是EXE文件怎么装?
- *********************寻求好的解决方法?*******************
- JAVA小白求助
- Android——ProgressDialog的大小设置
- 客户端byte[]通过webservice写入txt中文乱码
//所以,1行不注释的话,按理说3行是打印"hhhhhhhh",4行打印:"John"。所以就不明白了。希望大家给个解释,谢谢。。
--------------------------
LZ,针对你的例子说事。
子类新增的方法中可以写:
return this.getName();
this.setName("dddd");
但是子类新增的方法中不可以写:
return this.name;
就是说父类的private 实例字段 name,只有父类的方法才能访问,换句话说,子类定义的方法不能直接访问父类的私有实例字段。也就是,父类的私有实例字段与子类新定义的私有实例字段是有区别的。因此,
[ 但是既然是继承下来了,那操作的应该是子类的 private String name="hhhhhhhh";。 ]是你理解上出现了误读,因为子类没有name。
所有对 private String name="hhhhhhhh";的操作都是在操作父类中的
就算子类重写了 getName() 也访问不了父类的 private 属性吧?
主要是继承的对象搞混了。
上面的例子里继承的是方法,不是成员变量。class Person { // 这个不能被子类继承,也不能被子类访问
private String name="hhhhhhhh"; // 这个可以被子类继承为protected。能在子类里被调用。但操作的父类的成员变量
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}