1. 程式人生 > 實用技巧 >許可權修飾符和內部類

許可權修飾符和內部類

許可權修飾符

概述

  在Java當中提供了四種許可權修飾符,使用不同的訪問許可權修飾符修飾時,被修飾的內容會有不同的訪問許可權。

  • ​public: 公共的
  • protected: 受保護的
  • ​(default): 預設不寫
  • private:私有的

不同的許可權修飾符有不同訪問能力

public protected (default) private
同一類中
同一包下不同類中 ×
不同包的子類中 × ×
不同包的非子類中 × × ×

可見,private是最小的許可權,public是最大的許可權。

編寫程式碼建議使用:

  • ​成員變數:使用private,隱藏細節

  • 構造方法: 使用public,方便建立物件

  • ​成員方法: 建議使用public,方便呼叫。

  • 備註:【預設級別】,是不寫的

內部類

概述

什麼是內部類?

  將一個類A定義在另一個類B裡面,裡面的類A就稱為內部類,類B則稱為外部類

成員內部類

成員內部類:定義在類中方法外的類

格式:

修飾符  class 外部類名稱 {
    修飾符 class 內部類名稱{
        //......
    }
    //.....
}

在描述事物時,如果一個事物內部包含了另外的其他事物,就可以使用內部類這種結構。定義在【成員位置】

比如:心臟和身體的關係,此時就需要使用內部類的結構來描述這類事物。

訪問特點
  • ​內部類可以直接訪問外部類的成員,包括私有成員
  • ​外部類要訪問內部類的成員,必須建立內部類的物件

建立內部類物件的格式:

外部類類名.內部類類名  物件名    =   new   外部類類名().new 內部類類名();

備註:內部類仍然是一個獨立的類,編譯之後依然會生成一個獨立的.class檔案,該類檔名稱:外部類類名$內部類名.class

匿名內部類 【重點】
  • 匿名內部類:是內部類的簡寫。它的本質其實是一個帶著具體實現``父類或者父介面的``匿名的子類物件

    開發中,最常用到的內部類是【匿名內部類】

    前提

  匿名內部類必須【繼承一個父類】或者【實現一個介面】,伴隨著重寫父類或者父介面當中的抽象方法。

格式:

new 父類名或者父介面名 {
    // 方法的重寫
    @Override
    public void method(){
        // 重寫的方法體內容。。。
    }
};

通常在方法的形式引數是介面或者抽象類時,一般將匿名內部類作為實參進行引數傳遞。

public interface Animal {
    // 吃
    public abstract void eat();
}
// 定義一個啟動類
public class DemoAnonymous {
    // 定義成員方法
    public static void showEat(Animal animal){
        animal.eat();
    }
    
    public static void main(String[] args) {
        // 採用匿名內部類的方式來寫
        // 多型寫法  
        // 等號左邊:介面
        // 等號右邊:本質是Animal介面的子類物件
        Animal animal = new Animal() {
          	@Override
            public void eat(){
                System.out.println("貓吃魚");
            }
        };
        showEat(animal); // 貓吃魚  
        // 簡化一下
        showEat(new Animal(){
            @Override
            public void eat(){
                System.out.println("貓吃魚");
            }
        });
    }   
}