日期:2014-05-20  浏览次数:20694 次

关于子类继承父类private成员变量 的问题。。
Java code


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



------解决方案--------------------
//我就不明白了,setName(),貌似操作的是父类的 private String name="hhhhhhhh";。但是既然是继承下来了,那操作的应该是子类的 private String name="hhhhhhhh";。
//所以,1行不注释的话,按理说3行是打印"hhhhhhhh",4行打印:"John"。所以就不明白了。希望大家给个解释,谢谢。。
--------------------------
LZ,针对你的例子说事。
子类新增的方法中可以写:
return this.getName();
this.setName("dddd");
但是子类新增的方法中不可以写:
return this.name;
就是说父类的private 实例字段 name,只有父类的方法才能访问,换句话说,子类定义的方法不能直接访问父类的私有实例字段。也就是,父类的私有实例字段与子类新定义的私有实例字段是有区别的。因此,
[ 但是既然是继承下来了,那操作的应该是子类的 private String name="hhhhhhhh";。 ]是你理解上出现了误读,因为子类没有name。


------解决方案--------------------
private 属性的变量是继承不下来的 属于父类私有变量 子类中并不存在 
所有对 private String name="hhhhhhhh";的操作都是在操作父类中的
------解决方案--------------------
...私有变量如何继承啊...你的话就是错的
------解决方案--------------------
继承是继承了,但是不能访问,除非提供了公有的接口才可以访问
------解决方案--------------------
但是既然是继承下来了,那操作的应该是子类的 private String name="hhhhhhhh";。

————继承的意思就是:还是父类的那个name,只是现在无法直接访问了而已。
------解决方案--------------------
探讨
...私有变量如何继承啊...你的话就是错的

------解决方案--------------------
Java code
主要是继承的对象搞混了。
上面的例子里继承的是方法,不是成员变量。

class Person {

// 这个不能被子类继承,也不能被子类访问
private String name="hhhhhhhh";

// 这个可以被子类继承为protected。能在子类里被调用。但操作的父类的成员变量
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
 

------解决方案--------------------
私有变量能继承吗,lz要多看书啊
------解决方案--------------------
私有变量不能被继承,即便你改成不是私有变量继承了,那你改的还是父类的
------解决方案--------------------