權限修飾符和內部類

  • 2020 年 11 月 28 日
  • 筆記

權限修飾符

概述

  在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("貓吃魚");
            }
        });
    }   
}