2013-12-23 150 views
3

我定義一類基地關於訪問說明

class Base 
{ 
    private int i; 
    Base(int i) 
    { 
     this.i = i; 
    } 
} 

所以基類的對象可以訪問專用變量。

class BaseDemo 
{ 
     public static void main(String[] args) 
     { 
      Base objBase = new Base(10); 
      System.out.println(objBase.i); 
     } 
} 

但它給我一個編譯器錯誤我在Base私人通道。

編碼時我很困惑,怎麼了?

+2

「Base」或其包含的類中的任何代碼都可以訪問「i」。你正嘗試從'BaseDemo'訪問'i'。 –

+0

我無法使用其類的對象訪問變量i。好的,類似的,如果一個方法被定義爲private將不可訪問。 – user3128633

回答

4

Controlling Access to Members of a Class

Modifier Class Package Subclass World 
--------------------------------------------- 
public  Y  Y  Y   Y 
protected Y  Y  Y   N 
no modifier Y  Y  N   N 
private  Y  N  N   N 

英語新對於該領域應該具有獲取者。這是encapsulation的整個想法。你應該隱藏你的執行從外面,並提供設置器獲取器

+1

Awesome ASCII table :) –

1

private方法和變量只能在類中訪問。不要在課堂外面,即使你創建了不能訪問它們的實例。

official docs

私人修飾符指定該成員只能在自己的類訪問。

+0

謝謝各位... – user3128633

1

BaseDemo不是Base的實例,但即使是的Base孩子你標記領域i爲私有。只有Base可以訪問它,這就是private的含義。如果它是protected,則BaseBase的子類的實例可以訪問它。

+0

非常感謝...你的回答幫了我很多... – user3128633

1

我是類Base中的私有屬性,所以您不能直接訪問。這是面向對象的編程概念之一。

您可以創建的getter它

在基類

public int getI(){ 
    return this.i 
} 

在BaseDemo可以稱之爲

System.out.println(objBase.getI()); 
2

問題很簡單。你有變量「我」私人,你需要pojo(讓y集)公開使用變量「我」。

例如:

 


    public int getI() { 
     return this.i; 
    } 

 

在實施使用:

 


    objBase.getI(); 

 

PDT:對不起,我的英語我磺化聚醚醚酮西班牙語

0

錯誤是因爲你是voilanting訪問規則說明符,私有訪問說明符用於使您的變量可訪問,只需使用相同的名稱