A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

7 个回复

倒序浏览
我理解的是setName和getName方法并不是给子类使用的,而是给创建的对象用的
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
张海东 来自手机 中级黑马 2016-12-15 07:43:02
藤椅
那创建的对象也是子类对象啊
回复 使用道具 举报
子类中继承了父类中的成员变量和方法,私有变量也被继承了。子类继承的父类的私有变量,子类不能直接访问。它有name变量,只是如果要使用有限制,需要调用父类的方法。而子类也继承了父类的方法,所以可以设置。
回复 使用道具 举报
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成员变量,找不到去到父类找,父类又私有了,因此报错,说明没有继承私有了的成员变量*/
    }
}
回复 使用道具 举报
name属性私有,谁说创建对象就是子类了?这有关系么?继承继承的是什么?是变量和方法,已经私有的了是不能被继承的!这里的set  get方法就是外界用来给name赋值和获取的,这两个方法是public修饰的
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
只要子类没有name属性就会报错,因为父累的name不允许你访问
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马