Java继承深入理解:是否继承了父类的私有属性和方法

官方文档的解释:“A subclass does not inherit the private members of its parent class. However, if the superclass has public or protected methods for accessing its private fields, these can also be used by the subclass.”。原文地址:Inheritance
Student类继承了Person类,

基类Person的私有字段name不能被Student类继承。

这句话不代表Student对象里没有name信息。

新手可以想象Student对象里,本身就装着一个Person对象。Student对象没有继承Person对象的name字段,所以Student对象没有一个叫name的字段。但Student内部封装的Person对象还是有name字段的。

看下面代码,Person类有私有name字段,

public class Person {
    private String name;
    public Person(String name) { this.name = name; }
    public String getName() { return name; }
}

Student类继承Person类,

public class Student extends Person {
    private int id;
    public Student(String name, int id) {
        super(name);
        this.id = id;
    }
}

Student没有name字段,但它内部的Person对象有,而且还可以打出来看。

public static void main(String[] args) {
        Student s = new Student("bitch",99);
        System.out.println(s.getName()); // BITCH
        System.out.println(s.name); // ERROR: name has private access in Person
    }

而且注意,我要直接打印Student的name字段 “s.name” ,报错说的是:Person类的name字段为私有,你不可以访问。而不是没有name字段。

大胆一点的话,我们还可以给Student类再加一个name字段。这时候的Student对象本身有一个name字段,内部的基类Person对象还有一个name对象。

public class Student extends Person {
    private int id;
    private String name; 
    public Student(String personName, String studentName, int id) {
       super(personName);
       this.name = studentName;
       this.id = id;
    }
}

这时候,会打出来什么呢?

public static void main(String[] args) {
        Student s = new Student("bitch","whore",99);
        System.out.println(s.getName()); // BITCH
        System.out.println(s.name); // WHORE
    }

所以,**王翠花进了高盛,同事都叫她Susan,而且她不想让同事知道她其实叫王翠花。**是不是这个道理?

通过这个例子,可以体会一下一个“面向对象”的编程语言是怎么封装数据的。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森林老虎

混口饭吃嘿嘿

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值