1. 程式人生 > >聲明和訪問控制

聲明和訪問控制

聲明 prot pac 修飾符 class ack sys his end

保護和默認成員(protected)

1、保護和默認訪問控制級別幾乎完全相同,但只有一點主要區別,只有當訪問默認成員的類屬於同一個包時,才能訪問默認成員。而對於protected類成員而言,只要繼承了父類,即使子類位於不同的包中,該子類也能訪問它。而默認則不同,如果在不同的包中就無法訪問。

例如:

package parent;

public class Parent{

  protected int x = 10;

}

package child;

class Child extends Parent{

  public void testIt(){

    System.out.println("x is:" + x);

  }

}

這個Child類通過繼承訪問這個保護變量,無論何時當子類訪問父類成員時,都是在談論子類繼承成員,而不是通過父類的引用訪問該成員。

如果把上面的代碼改成

  Parent p = new Parent();

  System.out.println(p.x);

  這樣將會報錯

   技術分享圖片

  包外子類能繼承保護成員,並且包外子類不能使用父類引用訪問保護成員,對於包外子類,只能通過繼承來訪問保護成員。

  2、倘若包外子類,例如剛剛的Child類,如果和Child類在同一個包下有一個Child2類,那麽如果該Child2類有Child類的引用,並且訪問變量x,那麽此時將會報錯。因為子類一旦繼承了保護成員,該保護成員對這一子類的任何代碼都便成為了私有的了。那麽即使Child2與Child在同一個包下,Child2也不能訪問該繼承的變量。

  3、private public protected這樣的訪問修飾符是用來修飾成員變量的而不能修飾局部變量,事實上只有一個修飾符final能用來修飾局部變量。

  class Foo{

  void doSomething(){

      private int x = 7;

      this.otherMethod(x);//這樣是錯誤的

    }

  }

聲明和訪問控制