許可權修飾符和內部類
阿新 • • 發佈: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("貓吃魚");
}
});
}
}