java中私有变量到底有没有继承?

java中私有变量到底有没有继承?

//父类
public class A {
    public int publicNum = 3;  //公开变量
    private int privateNum = 4; //私有变量
}

//子类
public class B extends A{
    int a = publicNum;      //直接对父类共开变量操作
    int b = privateNum;     //对私有变量操作编译报错
}

关于继承的理解

继承的目的是为了对共有属性和行为的抽取,以此达到提高代码复用性的目的,从内存角度分析,继承的本质是在创建子类对象new的过程,调用了父类构造器super();因此在子类对象的堆内存中有一片父类对象的堆内存空间,子类可以调用父类非私有成员变量和方法。

 //空参构造
     public B() {
         super();      //默认调用父类空参构造,如果手动给出则不会默认给出
     }
 }

也就是说继承的本质是因为对父类构造器的调用,在子类堆内存中生成了父类对象的堆内存,内存图解如下:在这里插入图片描述
理论上来讲,对父类成员的操作都应该发生在子类创建对象之后(调用父类构造器之后),但是从代码上来看,显然在extends关键字之后,就已经能够对父类成员进行操作了,只是不创建子类对象,无法打印查看,这大概也是官方API文档的说法,父类私有成员不能被继承,在学习继承概念的时候,很多人会说私有成员变量是可以继承的,只是需要通过setter&getter方法间接访问。
但是这种间接访问的形式不应该在任何无关类中都可以允许的吗?即便类和类之间没有子父类关系,通过public的get()方法不是同样可以访问吗,所以这跟继承又有什么特殊关系?

总结

关于父类成员继承的问题我个人更倾向是对父类成员的复制,但他又区别于复制,因为如果子类复制了父类成员,那么私有成员应该属于子类的本类成员,理论是可以操作的。
个人目前理解是,对于访问权限允许的成员,子类是复制父类成员,而对于访问权限之外的成员,依旧遵循权限保护问题,只能间接访问
记录问题博文,后期做自己回顾用

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值