Java-关于子类是否继承了父类的private实例变量

   对面向对象程序设计语言中,对象模型是实现诸如封装、继承、多态的重要基础。在常见的面向对象语言:C++和Java等中,子类是继承了父类的所有实例字段的:也就是一个子类对象中包含了一个完整的父类对象。在C++中通过对子类对象进行sizeof运算求出其大小便可以很容易验证是否继承了父类中的private实例变量。但是Java中没有sizeof运算,今天突然想到一种方法也可以说明:子类对象中包含了父类private实例字段的。那就是通过错误提示信息。

class Base

{

    private int i = 0;

}

 

class Son extends Base

{

    public static void main(String[] args)

    {

        Son s = new Son( );

        System.out.println(s.i);

    }

}

会产生错误提示信息:Son.java:21: i 可以在 Base 中访问 private。

当我们注释掉 extends Base 以后Son没有继承自Base,此时编译出错信息为:

Son.java:21: 找不到符号

符号: 变量 i

位置: 类 Son

也就说明了若Son中没有包含实例变量i,则编译器应该会报错找不到符号。

Java虚拟机的连接模型中:通常有一个解析的过程:对某个类的字节码文件中所引用的其他类的实例变量或数据成员有一个解析的过程:其中就包括了对实例成员变量是否在类定义中存在的验证(包括对其父类和父类的父类等等),对成员变量是否具有访问权限等。通过错误提示信息可以看出:子类对象继承了父类的private实例变量。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值