2017-03-25 79 views
1

我正在學習java的繼承和封裝。下面是示例代碼Java超級專用字段

class Base { 
    private int x; 
    private int y; 

    Base(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 

    public int getX() { 
     return x; 
    } 

    public int getY() { 
     return y; 
    } 
} 

class Child extends Base { 
    Child(int x, int y) { 
    super(x, y); 
    } 
} 

Child c = new Child(1, 2); 
System.out.println(c.getX()); 

爲什麼我在Child類訪問xy(私人)? super改變了什麼?

+3

你不沒有(直接)訪問x和y的權限,但是你在Base類中創建了被Public類繼承的'public'方法,因此可以訪問x和y。 –

回答

1

您無權訪問xy中的Child類。當你寫

Child(int x, int y) { 
    super(x, y); 
} 

xyChild的構造函數的形參,碰巧被稱爲相同名稱的私有字段x和超類的y。他們可能也被稱爲別的東西 - 比如,ab,效果將是完全一樣的:

Child(int a, int b) { 
    super(a, b); 
} 
0

爲什麼我在兒童類訪問x和y(私人)?

你不,如果你想你可以做沒有問題:

System.out.println(c.x); 
System.out.println(c.y); 

你寫的,而不是公衆制定者/吸氣那是給你訪問(封裝)到田裏..