Java 類與物件(繼承extends super關鍵詞 方法重寫 抽象abstract 訪問修飾符/許可權控制符)
飛機大戰分析:
物件提取類:小敵機/大敵機/自己的飛機/子彈/小蜜蜂
小敵機類:
成員變數:
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大特徵:封裝 繼承 多型 抽象
相關文章
- JAVA物件導向高階:繼承:許可權修飾符(繼承注意事項) 單繼承 Object類 方法重寫Java物件繼承Object
- abstract關鍵字 super 關鍵字 類與繼承繼承
- 物件與引用,static關鍵字,程式碼塊,包,訪問許可權修飾符物件訪問許可權
- Java 的包, 許可權修飾符與final關鍵字Java
- Java 訪問許可權修飾符學習筆記Java訪問許可權筆記
- TypeScript入門2:類、繼承、訪問修飾符TypeScript繼承
- Java入門筆記(六)——訪問許可權修飾符Java筆記訪問許可權
- c# abstract抽象類及抽象方法_繼承C#抽象繼承
- 許可權修飾符
- Java修飾符關鍵詞大全Java
- 繼承&修飾符繼承
- java中public,protected,private關鍵字以及預設訪問許可權修飾符的用法細節Java訪問許可權
- PHP 物件導向 (一)許可權修飾符PHP物件
- 繼承 重寫和抽象類繼承抽象
- 介面是否可繼承(extends)介面? 抽象類是否可實現 (implements)介面? 抽象類是否可繼承具體類(concrete class)?繼承抽象
- TypeScript 類訪問修飾符TypeScript
- 深入理解 Java 修飾符與封裝:訪問許可權、行為控制與資料隱藏Java 修飾符封裝訪問許可權行為控制資料隱藏
- Java 建構函式與修飾符詳解:初始化物件與控制許可權Java函式物件
- 關於Java中各種修飾符與訪問修飾符的說明 (轉)Java
- Java的訪問修飾符Java
- C++中類繼承public,protected和private關鍵字作用詳解及派生類的訪問許可權C++繼承訪問許可權
- java繼承-重寫-super例項補充Java繼承
- java繼承extendsJava繼承
- java 訪問控制符和supper,thisJava
- C++中封裝和繼承的訪問許可權C++封裝繼承訪問許可權
- C++ 的三種訪問許可權與三種繼承方式C++訪問許可權繼承
- 訪問修飾符
- java oop 修飾符&關鍵字JavaOOP
- C++繼承時的修飾符C++繼承
- c# abstract抽象類_非抽象類_virtual_虛方法_override重寫C#抽象IDE
- c# abstract抽象類與繼承類子類的建構函式_baseC#抽象繼承函式
- Java的“友好的”訪問指示符(修飾符)Java
- java繼承-final關鍵詞用法Java繼承
- 【JAVA】筆記(5)--- final;抽象方法;抽象類;介面;解析繼承,關聯,與實現;Java筆記抽象繼承
- java抽象繼承-模板方法Java抽象繼承
- Java之繼承和抽象類Java繼承抽象
- JAVA介面繼承、抽象類等Java繼承抽象
- Java關鍵字之abstract(抽象類的概念和使用)Java抽象