对于父类的私有属性,子类是从哪里访问到的?
2016-07-17 00:47
232 查看
其实也是牵扯到子类继承父类时,父类的private属性在子类中是什么样的问题。
根据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.
A nested class has access to all the private members of its enclosing class—both fields and methods. Therefore, a public or protected nested class inherited by a subclass has indirect access to all of the private members of the superclass.
子类是无法继承父类的private成员的,但是在子类对象的内存里有没有父类的private成员呢?来看以下的代码:
其运行结果如下:
所以,我认为子类实例空间中是有父类的私有成员的,但是有不代表继承,只有能直接使用才说明子类继承了父类。
根据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.
A nested class has access to all the private members of its enclosing class—both fields and methods. Therefore, a public or protected nested class inherited by a subclass has indirect access to all of the private members of the superclass.
子类是无法继承父类的private成员的,但是在子类对象的内存里有没有父类的private成员呢?来看以下的代码:
package cn.haiyisoft3; public class ExtendsDemo02 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub // 验证子类能否访问父类中的private属性或者方法 // 或者说继承? child ch = new child(); ch.setage(10); ch.name = "xiaomim"; System.out.println(ch); System.out.println(ch.getage()); } } class person_private { private int age; String name; public void setage(int age) { this.age = age; } public int getage() { System.out.println(this); return this.age; } } class child extends person_private { void cry() { System.out.println("wowo"); } }
其运行结果如下:
cn.haiyisoft3.child@55f33675 cn.haiyisoft3.child@55f33675 10这说明this和ch指向的是同一个对象,也就是说子类调用的自己实例对象内存空间的父类私有属性age。
所以,我认为子类实例空间中是有父类的私有成员的,但是有不代表继承,只有能直接使用才说明子类继承了父类。
相关文章推荐
- golang之cgo---调用C/C++动态库函数
- python内置函数 2
- Fatal error compiling: 无效的目标发行版: 1.8
- 编译安装 Zend Opcache 缓存Opcache,加速 PHP
- Linq查询的简单使用
- leetcode-371. Sum of Two Integers
- linux C 打印错误信息和标准输入输出
- java中基础的Annotation--@Override @Deprecated @SuppressWarnings
- SpringBoot Quickstart
- 模拟乘法运算之N的阶乘(大数阶乘)
- Linux 新建用户、用户组,给用户分配权限(chown、useradd、groupadd、userdel、usermod、passwd、groupdel)
- 致努力的自己
- SpringBoot Quickstart
- 配置python tab键自动补全
- HTML基础课程笔记
- 构造方法探析
- hibernate中criteria的用法
- java与xml之DOM创建和解析XML文档
- 折半查找(二分法)
- Ubuntu16.04 安装openjdk-7-jdk