Home [C# 筆記][多型] Abstract 抽象類
Post
Cancel

[C# 筆記][多型] Abstract 抽象類

多型的虛方法

概念:讓一個物件能夠表現出多種的狀態(類型)

實現多型的三種手段:

  1. 虛方法 virtual (virtual, override)
  2. 抽象類 abstract (abstract, override)
  3. 接口

抽象類

當父類中的方法不知道如何去實現的時候,可以考慮將父類寫成抽象類,將方法寫成抽象方法。
既然不能實現,就不要實現,就用抽象類,讓子類去實現。

抽象類&抽象方法是什麼意思?

  • 叫的方法,不知道怎麼去實現,可以考慮用抽象類
  • 抽象類是不允許有方法體的(沒有大括號)

    什麼叫方法體,就是不能有大括號

抽象類(abstract)跟虛方法(virtual)區別在哪?

抽象類的父類,沒有實現方法
虛方法的父類,有實現方法的

1
2
3
4
5
6
7
//沒有方法體(沒有大括號)
public abstract void Test();

//這個叫做空實現(有大括號)
public void Test() {
    //空實現
}

範例:狗狗會叫,貓咪也會叫

沒有現成的父類,因為狗狗跟貓咪都不能當做父類,所以用動物做為父類。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//叫的方法,不知道怎麼去實現,可以考慮用抽象類
//也就是說,既然不能實現,就用抽象類

//抽象類無法創建對象(物件),為什麼? 因為它沒方法,創建沒有意義
//Animal animal = new Animal();   

Animal dog = new Dog(); //父類裡面裝的是子類對象
dog.Bark();
Cat cat = new Cat();
cat.Bark();
Console.ReadKey();

//父類
//叫的方法,不知道怎麼去實現,可以考慮用抽象類
public abstract class Animal
{
    //抽象類是不允許有方法體的(沒有大括號)
    public abstract void Bark();
}

//子類
public class Dog: Animal
{
    public override void Bark() {
        Console.WriteLine("狗狗汪叫!");
    }
}

public class Cat : Animal {
    public override void Bark() {
        Console.WriteLine("貓咪喵喵叫");
    }
}

什麼時候用虛方法、抽象類?

  • 父類的函式有實現、有意義的時候,就用虛方法(virtual)
  • 父類的函式不知道怎麼去實現,就用抽象類(abstract)
This post is licensed under CC BY 4.0 by the author.