訪問控制修飾符用法總結(jié)

訪問控制修飾符用法總結(jié)

訪問控制修飾符一共四類:defaultpublic、private、protected

default

  • 關(guān)鍵字:無。不寫訪問控制修飾符即為default

  • 訪問權(quán)限:同一包內(nèi)可見

  • 修飾對象:類、接口、變量、方法

import pkg1.A;

public class Main {

  public static void main(String[] args) {
    A a = new A(); // 編譯不通過:'pkg1.A' is not public in 'pkg1'. Cannot be accessed from outside package
  }
}

// ---------------------------------------------------------------------

package pkg1;

class A implements B { // 該類的訪問權(quán)限為default
  int field; // 該字段訪問權(quán)限為default

  void method(int aInt) {
    // 該方法的訪問權(quán)限為default
  }

  @Override
  public void method1() {
    System.out.println("method1 is implemented.");
  }
}

interface B { // 該接口的訪問權(quán)限為default
  void method1();
}

class C {
  public void method3() {
    A a = new A();
    a.method(a.field); // 同包內(nèi)可以訪問權(quán)限為default的類、方法、字段
  }
}

public

  • 關(guān)鍵字:public
  • 訪問權(quán)限:對所有類可見
  • 修飾對象:類、接口、變量、方法
import pkg2.A;

public class Main {

  public static void main(String[] args) {
    A a = new A();
    a.method(a.field); // 所有類均可以訪問權(quán)限為public的class A
  }
}

// ---------------------------------------------------------------------

package pkg2;

public class A implements B { // 該類的訪問權(quán)限為public
  public int field; // 該字段的訪問權(quán)限為public

  public void method(int aInt) {
    // 該方法的訪問權(quán)限為public
  }

  @Override
  public void method1() {
    System.out.println("method1 is implemented.");
  }
}

public interface B { // 該接口的訪問權(quán)限為public
  public void method1();
}


private

  • 關(guān)鍵字:private
  • 訪問權(quán)限:在同一類內(nèi)可見
  • 修飾對象:變量、方法,不能修飾類(外部類)、接口
import pkg3.C;

public class Main {
  
  public static void main(String[] args) {
    C c = new C();
    c.method(0); // 編譯不通過:'method()' has private access in 'pkg3.C'
  }
}

// ---------------------------------------------------------------------
package pkg3;

public class C { // 該類為外部類,訪問權(quán)限不能為private,否則編譯不通過
  private int field; // 該字段的訪問權(quán)限為private

  private class B {} // 該類為內(nèi)部類,訪問權(quán)限可以為private

  private void method() {
    // 該方法的訪問權(quán)限為private
    System.out.println(this.field); // 類內(nèi)部可以訪問私有字段
  }
}

package pkg3;

private interface E { // 編譯不通過:Modifier 'private' not allowed here
    //...
}

protected

  • 關(guān)鍵字:protected
  • 訪問權(quán)限:
    • 基類的protected成員是包內(nèi)可見的,并且對子類可見;
    • 若子類與基類不在同一包中,那么在子類中,子類實(shí)例可以訪問其從基類繼承而來的protected方法,而不能訪問基類實(shí)例的protected方法。
  • 修飾對象:變量、方法。 不能修飾類(外部類)、接口
package pkg4;

import pkg1.H;
import pkg1.K;

public class Test {
  public static void main(String[] args) {
    F f = new F();
    G g = new G(); // 是F類的同包子類
    H h = new H(); // 是F類的不同包子類

    f.method();
    g.method(); // protected方法是包內(nèi)可見的
    h.method(); // protected方法是對子類可見的

    K k = new K();
    k.method(); // 編譯不通過:'method()' has protected access in 'pkg1.K'
  }
}

// ---------------------------------------------------------------------
package pkg4;

public class F { // 該類為外部類,訪問權(quán)限不能為protected,否則編譯不通過
  protected int field; // 該字段的訪問權(quán)限為protected

  protected void method() {
    // 該方法的訪問權(quán)限為protected
  }
}

public class G extends F {} // 同包子類

// ---------------------------------------------------------------------
package pkg1;

import pkg4.F;
import pkg4.Test;

public class H extends F {} // 不同包子類

public class K extends Test {
  protected void method() {
    //...
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 正文之前 今天總算是把那個(gè)黨員談話給弄完了,三個(gè)學(xué)弟輪番跟我來聊天,講自己的入黨動(dòng)機(jī)啥的,看到他們就仿佛看到了大一...
    張照博閱讀 726評論 0 3
  • 學(xué)之廣在于不倦,不倦在于固志。 ——晉·葛洪- (學(xué)問的淵博在于學(xué)習(xí)時(shí)不知道厭倦,而學(xué)習(xí)不知厭倦在于有堅(jiān)定的目標(biāo))...
    Okamiy閱讀 401評論 2 0
  • 訪問控制修飾符: 用來控制對類、方法和變量訪問權(quán)限的修飾符。Java 支持 4 種不同的訪問權(quán)限: default...
    竹鼠不要中暑閱讀 799評論 0 2
  • 修飾符用來定義類、方法或者變量的,通常放在語句最前端。Java提供了很多修飾符,主要分為兩類:訪問修飾符、非訪問修...
    TESTME閱讀 256評論 0 0
  • 小傻瓜,今天,不知你想說什么,很急,很糾結(jié),卻又不知道該怎么勸你,該怎么告訴你:對我,你可以說出你想說的全部。 寶...
    子魚公子閱讀 278評論 0 0

友情鏈接更多精彩內(nèi)容