1,程序运行中接连两次调用了父类A的构造函数?
我觉得是因为第一次调用是:B是A的内部类,相当于A的成员,想要创建B的实例,首先要创建A的实例,所以要调用A的构造函数。也就是 A b=new A().new B(3);中的第一个new A()
第二次调用是:因为B继承了A,在对B进行实例化的时候也就是new B(3),B的构造函数第一行默认super(),对父类A的无参构造函数进行了调用。
问题2:为什么此时允许在子类中访问父类的私有变量?而且只能用super访问吗?
因为B类已经在A类的内部,相当于A的内部成员,而私有变量在类的内部可见,所以B可以通过super.test调用父类A的私有变量,存在继承关系只能通super调用;
问题3:如何禁止子类对象“乔装”成父类而访问到了父类的私有变量呢?
子类不是父类的内部类时,也就不能访问父类的私有成员了。 |