background image

-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. }   
15.

  

16.

public class SubClass extends ParentClass {