JAVA學習線路:day01物件導向(繼承、抽象類)

CodeBull發表於2020-10-10

所有的文件和原始碼都開源在GitHub: https://github.com/kun213/DailyCode上了。希望我們可以一起加油,一起學習,一起交流。

day01物件導向【繼承、抽象類】

今日學習內容-2020.9.16

@

類與物件

1、什麼是類

類是現實事物的抽象,將現實事物描述成對應的類,其行為封裝為方法,屬性封裝為成員變數。

2、什麼是物件

物件是從類中得到的具體例項!在定義Person類並沒有一個具體的人出現,而建立物件後,就會出現一個具體的人

繼承

1、說出繼承的概念

當要定義一個類(講師)時,發現已有類(員工)和要定義的類相似,並且要定義的類屬於已有類的一種時,可以將要定義類定義為已有類的子類。同時也可以反過來思考,當多個類(講師,助教,班主任)有共性內容,可以將共性內容向上抽取,抽取到一個新的類(員工)中,那麼多個類和新的類形成的關係叫做繼承。

2、寫出繼承的格式

通過 extends 關鍵字,可以宣告一個子類繼承另外一個父類,定義格式如下:

class 父類 {
	...
}
class 子類 extends 父類 {
	...
}

3、區分this和super的作用

super和this的含義

  • super :代表父類的儲存空間標識(可以理解為父親的引用)。

  • this :代表當前物件的引用(誰呼叫就代表誰)。

super和this的用法

  1. 訪問成員
this.成員變數    	--    本類的
super.成員變數    	--    父類的

this.成員方法名()  	--    本類的    
super.成員方法名()   --    父類的

用法演示,程式碼如下:

class Animal {
    public void eat() {
        System.out.println("animal : eat");
    }
}
 
class Cat extends Animal {
    public void eat() {
        System.out.println("cat : eat");
    }
    public void eatTest() {
        this.eat();   // this  呼叫本類的方法
        super.eat();  // super 呼叫父類的方法
    }
}
 
public class ExtendsDemo08 {
    public static void main(String[] args) {
        Animal a = new Animal();
        a.eat();
        Cat c = new Cat();
        c.eatTest();
    }
}

輸出結果為:
animal : eat
cat : eat
animal : eat
  1. 訪問構造方法
this(...)    	--    本類的構造方法
super(...)   	--    父類的構造方法

子類的每個構造方法中均有預設的super(),呼叫父類的空參構造。手動呼叫父類構造會覆蓋預設的super()。

super() 和 this() 都必須是在構造方法的第一行,所以不能同時出現。

抽象類

1、寫出抽象方法的格式

抽象方法

使用abstract 關鍵字修飾方法,該方法就成了抽象方法,抽象方法只包含一個方法名,而沒有方法體。

定義格式:

修飾符 abstract 返回值型別 方法名 (引數列表);

程式碼舉例:

public abstract void run();

2、寫出抽象類的格式

抽象類

如果一個類包含抽象方法,那麼該類必須是抽象類。

定義格式:

public abstract class 類名字 { 
  
}

程式碼舉例:

public abstract class Employee {
    public abstract void work();
}

3、注意事項

關於抽象類的使用,以下為語法上要注意的細節,雖然條目較多,但若理解了抽象的本質,無需死記硬背。

  1. 抽象類不能建立物件,如果建立,編譯無法通過而報錯。只能建立其非抽象子類的物件。

    理解:假設建立了抽象類的物件,呼叫抽象的方法,而抽象方法沒有具體的方法體,沒有意義。

  2. 抽象類中,可以有構造方法,是供子類建立物件時,初始化父類成員使用的。

    理解:子類的構造方法中,有預設的super(),需要訪問父類構造方法。

  3. 抽象類中,可以有成員變數。

    理解:子類的共性的成員變數 , 可以定義在抽象父類中。

  4. 抽象類中,不一定包含抽象方法,但是有抽象方法的類必定是抽象類。

    理解:未包含抽象方法的抽象類,目的就是不想讓呼叫者建立該類物件,通常用於某些特殊的類結構設計。

  5. 抽象類的子類,必須重寫抽象父類中所有的抽象方法,否則,編譯無法通過而報錯。除非該子類也是抽象類。

    理解:假設不重寫所有抽象方法,則類中可能包含抽象方法。那麼建立物件後,呼叫抽象的方法,沒有意義。


這是我的公眾號,希望大家可以關注,讓我們一起做最好的自我。
我也會把我自學視訊分享在上面,供大家一起學習。

CodeBull

相關文章