-JAVA 程序员 JAVA 工程师面试必看
我们来看看这么一道题:
Java
代码
1.
class ParentClass {
2.
public int i =
10
;
3.
}
4.
5.
public class SubClass extends ParentClass {
6.
public int i =
30
;
7.
8.
public static void main(String[] args) {
9.
ParentClass parentClass = new SubClass();
10.
SubClass subClass = new SubClass();
11.
System.out.println(parentClass.i + subClass.i);
12.
}
13. }
控制台的输出结果是多少呢?20?40?还是 60
?
变量,或者叫做类的属性,在继承的情况下,如果父类和子类存在同名的变量会出现什么情况呢?这就是
——
这道题要考查的知识点
变量(属性)的覆盖。
这个问题虽然简单,但是情况却比较复杂。因为我们不仅要考虑变量、静态变量和常量三种情况,还要考
虑 private、friendly(即不加访问修饰符)、protected 和 public
四种访问权限下对属性的不同影响。
我们先从普通变量说起。依照我们的惯例,先来看一段代码:
Java
代码
1.
class ParentClass {
2.
private String privateField = "父类变量--private";
3.
4.
/* friendly */String friendlyField = "父类变量--friendly";
5.
6.
protected String protectedField = "父类变量--protected";
7.
8.
public String publicField = "父类变量--public";
9.
10.
// private
的变量无法直接访问,因此我们给他增加了一个访问方法
11.
public String getPrivateFieldValue() {
12.
return privateField;
13.
}
14. }