关于Java中子类是否继承了父类的私有属性及方法

一、最近在学习Java的过程中,跟同学讨论了一个问题:

Java中子类是否继承了父类的私有属性及方法?

看课本上所描述的,子类继承父类,子类拥有父类所有的属性和方法,于是使用程序去验证,发现父类的私有属性和私有方法,子类是不能访问的,当然一些父类的私有属性可能可以通过相应的方法访问到,需要父类提供public getter或者setter方法让子类进行属性的访问,但是私有的方法似乎不能简单的访问,于是我认为,子类不能继承父类私有的属性及方法,但事实上并没有那么简单。

甲骨文JAVA官方学习文档中,提到
在这里插入图片描述
因此综合结论即子类继承其父级的所有公共成员和受保护成员,无论该子类位于哪个包中。如果该子类与其父级位于同一包中,则它也继承父级的包私有成员。所以继承使子类拥有父类所有的属性和方法其实可以这样理解,子类对象是拥有父类对象中所有的属性和方法,但是父类对象中的私有属性和方法,子类是无法访问到的,只是拥有,但不能使用。就像有些东西你可能拥有,但是你并不能使用。所以子类对象是绝对大于父类对象的,所谓的子类对象只能继承父类非私有的属性及方法的说法是错误的。可以继承,只是无法访问到而已。

1、关于私有成员变量

无论父类中的成员变量是私有的、共有的、还是其它类型的,子类都会拥有父类中的这些成员变量。但是父类中的私有成员变量,无法在子类中直接访问,必须通过从父类中继承得到的protected、public方法(如getter、setter方法)来访问。

2、关于静态成员变量

无论父类中的成员变量是静态的、还是非静态的,子类都会拥有父类中的这些成员变量。

3、关于被子类覆盖的成员变量

无论父类中的成员变量是否被子类覆盖,子类都会拥有父类中的这些成员变量。

代码测试:

package demo;
/**
* @author Administrator
*Description :子类继承父类测试
*Date 12/26 11:23
 */
public class Main {

        public static void main(String[] args){

            Student mStudent = new Student("子类");

            System.out.println("Name is : " + mStudent.getName());

            mStudent.setName("父类");

            System.out.println("Name is : " + mStudent.getName());

        }
}

 class Person{

    private String name;


    public Person(String name){

        this.name = name;

    }


    public void setName(String name){

        this.name = name;

    }


    public String getName(){

        return name;

    }

}
 class Student extends Person{

    public Student(String name){

        super(name);

    }

}

参考文章:
oracleJava文献资料
Java中子类继承了父类的私有属性及方法吗?
继承:子类可以继承父类的私有成员变量吗??

二、小结

从语言角度上说:JDK官方文档明确说明子类不能继承父类的私有方法;
但从内存角度来说,jvm在实例化子类对象之前,会先在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类对象。所以子类确实拥有父类所有的属性和方法,但是父类中的私有方法子类无法访问。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值