黑马程序员技术交流社区

标题: 子类继承父类后,父类中被私有的成员变量的问题 [打印本页]

作者: 张海东    时间: 2016-12-14 22:27
标题: 子类继承父类后,父类中被私有的成员变量的问题
按目前所学知识来说,子类继承父类后,父类中被私有的成员变量,即使是子类也不能直接访问的,那么在父类中的公有的set和get方法能对外提供被私有成员变量的访问,而子类也继承了这些方法。比如父类中private name;有setName和getName方法,子类创建了对象并调用setName和getName方法完成初始化。但为什么子类中能有name这个成员变量呢?父类中的name不是被私有了吗?子类中理应没有name这个变量的,求解答
作者: wqq1317    时间: 2016-12-14 22:38
我理解的是setName和getName方法并不是给子类使用的,而是给创建的对象用的

作者: 张海东    时间: 2016-12-15 07:43
那创建的对象也是子类对象啊
作者: If_091021    时间: 2016-12-31 14:53
子类中继承了父类中的成员变量和方法,私有变量也被继承了。子类继承的父类的私有变量,子类不能直接访问。它有name变量,只是如果要使用有限制,需要调用父类的方法。而子类也继承了父类的方法,所以可以设置。
作者: 一片叶~    时间: 2016-12-31 16:19
class Test {
    public static void main(String[] args) {
        Son s =new Son();
        s.setName("张三");
        System.out.println(s.getName());
    }
}

class Father {
    private String name = "李四";
   
    public void setName(String name) {
        //this.name = name;              /*子类继承了setName 和 getName 方法,但如果不给this.name = name; 语句,是不能访问父类name成员变量的,实际操作name的还是代表父类的对象this */
        System.out.println("我是设置属性方法");
    }
   
    public String getName() {
        return name;
    }
}

class Son extends Father {
    public void print() {
        //System.out.println(this.name);   /*报错,name has private access in Father, this 是代表Son对象,                  首先在本类找name成员变量,找不到去到父类找,父类又私有了,因此报错,说明没有继承私有了的成员变量*/
    }
}
作者: 2016110659    时间: 2016-12-31 18:28
name属性私有,谁说创建对象就是子类了?这有关系么?继承继承的是什么?是变量和方法,已经私有的了是不能被继承的!这里的set  get方法就是外界用来给name赋值和获取的,这两个方法是public修饰的

作者: 2016110659    时间: 2016-12-31 18:30
只要子类没有name属性就会报错,因为父累的name不允许你访问

作者: 袁志娜    时间: 2017-2-4 22:25





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2