Java 類與物件(繼承extends super關鍵詞 方法重寫 抽象abstract 訪問修飾符/許可權控制符)

細雨xu發表於2020-12-26

飛機大戰分析:
物件提取類:小敵機/大敵機/自己的飛機/子彈/小蜜蜂

小敵機類:
	成員變數:
		int x,int y,圖片,int width,int height
	成員方法:
		move()
		
大敵機類:
	成員變數:
		int x,int y,圖片,int width,int height,int life
	成員方法:
		move()
		
自己的飛機類:
	成員變數:
		int x,int y,圖片,int width,int height,int life,int score,子彈
	成員方法:
		move()
		
子彈類:
	成員變數:
		int x,int y,圖片,int width,int height
	成員方法:
		move()
		
小蜜蜂類:
	成員變數:
		int x,int y,圖片,int width,int height
	成員方法:
		move()

把所有類中相同的成員變數和成員方法 -> 提取出來 -> 形成一個類 -> 父類

升級版:

子類 extends 父類
父類(基類):
	成員變數:
		int x,int y,圖片,int width,int height
	成員方法:
		move()
子類(衍生類/擴張類):
	小敵機類:
	大敵機類:
		int life
	自己的飛機類:
		int life,int score,子彈
	子彈類:	
	小蜜蜂類:

1.繼承(extends)

1.結構:
	子類(衍生類/擴張類) extends 父類/基類
2.繼承的特徵
	1)子類繼承父類,會繼承父類所有的成員變數和成員方法
	2)所有的類都有唯一一個父類 如果沒有寫父類,那麼就會預設繼承Object
	3)子類可以擁有自己的成員變數和成員方法 並且子類的功能一定比父類的更強大
	4)一個類只能繼承一個父類 父類可以擁有很多個子類

特殊情況:

1.建立子類物件之前,會先建立父類物件 載入子類之前會先載入父類
2.構造方法:
	呼叫子類構造方法之前,一定會呼叫父類的構造方法,預設呼叫父類的無參構造方法
3.子類中可以引用父類物件
4.子類和父類中有相同的成員變數時
	例如:name
	那麼會先去執行子類中屬性,如果沒有才會去找父類中的成員變數
	建議:子類和父類中不要有相同的成員變數
5.通過子類物件呼叫方法時 會先去找子類中有沒有這個方法,如果有就實現子類中的內容;如果沒有就會去找父類中的這個方法

2.super關鍵詞

1)呼叫子類構造方法之前,一定會呼叫父類的構造方法,預設呼叫父類的無參構造方法
	使用super關鍵詞呼叫
2)父類中的構造方法 只能呼叫,不能繼承,預設新增super()
3)如果父類中沒有無參構造方法,就需要手動呼叫父類中的有參構造方法
	super(引數)
4)super	(引數),只能放在第一行

3.方法重寫

1)重寫的前提:
	必須存在父子類關係
2)語法結構:
	子類的方法名+方法引數+返回值型別都必須和父類中一致

方法的重寫(Override)和方法的過載(Overload)的區別:

方法的重寫的前提:
	必須在父子類關係中
方法的過載的前提:
	必須在同一個類中
	引數不一樣:
		個數 順序 型別

this和super的區別:

this表示當前物件
super表示父類物件

4.抽象(abstract)

abstract可以修飾類和方法
1)抽象方法:
	a.出現的前提:
		例如:move()
			所有的子類中的move()都有不用的實現,那也就是說明父類中的move()方法體沒有意義
			沒有意義的東西不需要 -> 刪除 ->抽象方法 ->加abstract
	b.子類必須重寫父類中的抽象方法 如果不重寫,就要把自己變成抽象類
	c.抽象方法的特點
		1.沒有方法體的方法叫抽象方法
		2.抽象方法一定要存在於抽象類中
	
2)抽象類
	a.abstract修飾的類叫抽象類
	b.抽象類不能new物件,也就是不能建立類的例項化(new dog())
	c.抽象類也有構造方法.就是為了給子類使用

3)abstract不能修飾成員變數,因為成員變數是有具體的型別

判斷:
	有抽象方法的類就是抽象類 √
	抽象類就是有抽象方法的類 ×
	沒有抽象方法的也是抽象類 √

5.訪問修飾符/許可權控制符

public:公開的,公共的
protected:受保護的 -> 經常修飾有父子類關係的類
default:預設的,(default)是不寫的,沒有這個詞
private:私有的

訪問控制符可以修飾類/可以修飾[靜態]成員變數/修飾[靜態]成員方法/程式碼塊

自己類中:                              public    protected    default    private
同包(沒有任何關係的類/不同類):           public    protected    default    
不同包下(有父子關係的類):                public    protected    
所有類(不同包下沒有父子關係得類):         public    
	
訪問許可權範圍:
	最大得是public 最小的是private
	
使用情況:
	public:想讓所有的類都可見時
	protected:在父子類關係中可用
	default:不常用,練習時使用
	private:普通類中都可用
		get/set

物件導向4大特徵:封裝 繼承 多型 抽象

相關文章