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:
10
super value:
10
subClassB value:
30
super value:
30
super value:
如果修改private为public是否答案等同?必须等同