權限修飾符和內部類
- 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("貓吃魚");
}
});
}
}