Java面试题之子类是否继承父类属性?
题目如下:
public class Super { private int i = 10; public void execute() { System.out.println(i); } public static void main(String[] args) { SubClassA subClass = new SubClassA(); Super superClass = subClass; System.out.println("subClassA value:"); subClass.execute(); System.out.println("super value:"); superClass.execute(); SubClassB subClassB = new SubClassB(); superClass = subClassB; System.out.println("subClassB value:"); subClassB.execute(); System.out.println("super value:"); superClass.execute(); }}class SubClassA extends Super { private int i = 20;}class SubClassB extends Super { private int i = 30; public void execute() { System.out.println(i); }}
问题:结果的输出是什么?
先不考虑结果我们先看下继承在Java里是个什么概念?
写道
Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
也就是说继承主要是为了功能次要是为了数据,那么我们分析上述答案
1.首先看实际执行的方法是哪个类的?
2.那么执行的方法所在类也就是this访问的变量自然就是哪个类的变量
答案:
subClassA value:10super value:10subClassB value:30super value:30super value:
如果修改private为public是否答案等同?必须等同