[JavaⅠ]4.1繼承與多型——繼承、super、抽象類
阿新 • • 發佈:2021-07-21
就是子類繼承父類的屬性和行為,使得子類物件具有與父類相同的屬性、相同的行為,子類可以直接訪問父類中的非私有的屬性和行為。
繼承與抽象類
-
定義
就是子類繼承父類的屬性和行為,使得子類物件具有與父類相同的屬性、相同的行為。子類可以直接訪問父類中的非私有的屬性和行為。
-
好處
- 提高程式碼的複用性。
- 類與類之間產生了關係,是多型的前提。
1 繼承的格式
-
extends 關鍵字,可以宣告一個子類繼承另外一個父類
class 父類 { ... } class 子類 extends 父類 { ... }
2 重名的成員變數
成員變數不重名無影響,子父類中出現了同名的成員變數時,在子類中需要訪問父類中非私有成員變數時,需要使用 super 關鍵字,修飾 父類成員變數,類似於之前學過的 this 。
使用格式:
super.父類成員變數名
程式碼
class Fu { // Fu中的成員變數。 int num = 6; } class Zi extends Fu { // Zi中的成員變數 int num = 9; public void show(){ //訪問子類的sum System.out.println(sum); //訪問子類的sum System.out.println(this.sum); //訪問父類的sum System.out.println(super.sum); } } class ExtendsDemo03 { public static void main(String[] args) { // 建立子類物件 Zi z = new Zi(); // 呼叫子類中的show方法 z.show(); } } //執行結果為 996
3 重名的成員方法(重寫)
成員方法不重名無影響,如果子類父類中出現重名的成員方法,這時的訪問是一種特殊情況,叫做方法重寫 (Override)。
- 方法重寫 :子類中出現與父類一模一樣的方法時(返回值型別,方法名和引數列表都相同),會出現覆蓋效
果,也稱為重寫或者複寫。宣告不變,重新實現。
- 子類可以根據需要,定義特定於自己的行為。既沿襲了父類的功能名稱,又根據子類的需要重新實現父類方法,從
而進行擴充套件增強。
public class Fu { //Fu類的成員方法 public void show(){ System.out.println("fu"); } } public class Zi extends Fu{ //Zi類的成員方法 public void show(){ //沿襲父類方法 super.show(); //重新實現 System.out.println("zi"); } } public class Demo02 { public static void main(String[] args) { // 建立子類物件 Zi zi = new Zi(); // 呼叫子類中的show方法 zi.show(); } }
4 Java繼承的特點
- Java只支援單繼承,不支援多繼承
- Java支援多層繼承(繼承體系)
- 子類和父類是一種相對的概念。
5 抽象類
父類中的方法,被它的子類們重寫,子類各自的實現都不盡相同。那麼父類的方法宣告和方法主體,只有宣告還有意義,而方法主體則沒有存在的意義了。
我們把沒有方法主體的方法稱為抽象方法,包含抽象方法 的類就是抽象類
-
抽象方法
使用 abstract 關鍵字修飾方法,該方法就成了抽象方法,抽象方法只包含一個方法名,而沒有方法體。
定義格式:
修飾符 abstract 返回值型別 方法名 (引數列表);
-
抽象類
如果一個類包含抽象方法,那麼該類必須是抽象類。
定義格式:
abstract class 類名字 { }
繼承抽象類的子類必須重寫父類所有的抽象方法。否則,該子類也必須宣告為抽象類。最終,必須有子類實現該父 類的抽象方法,否則,從最初的父類到最終的子類都不能建立物件,失去意義。
程式碼
public abstract class Fu { public abstract void show(); } public class Zi extends Fu{ @Override public void show() { System.out.println("zi"); } } public class Demo03 { public static void main(String[] args) { Zi zi = new Zi(); zi.show(); } }
參考資料:
《Java教程零基礎入門到精通IDEA版》黑馬程式設計師