C 學習 4 介面實現多型

2021-10-03 11:34:58 字數 3565 閱讀 9314

1.介面的概念

1.1什麼是介面?

介面是一種規範,是一種約束形式,其中只包括成員定義,不包含成員實現的內容。介面是一種能力,沒有具體實現,像抽象方法一樣,光說不做

1.2介面怎麼定義?

介面的定義與類的定義是類似的,只不過關鍵字不是class,而是inte***ce。具體定義的特點如下:

需要注意的是介面名稱一般以大寫字母i開始,下面定義乙個展示物件資訊的介面:

inte***ce

ishowinfo

1.3介面怎麼實現?

讓某個類繼承上面定義的介面,實現介面中定義的列印資訊的方法,就實現了這個介面。需要注意的是,介面的實現分為普通實現方法和顯示實現方法兩種。

下面這種是普通實現方法:

class

animal

:ishowinfo

}

下面這種是顯式實現方法:

class

animal1

:ishowinfo

}

為什麼需要顯式實現介面呢?假設乙個類實現了多個介面,每個介面中都有乙個定義相同的方法,我們用乙個類來繼承這兩個介面,示例如下:

inte***ce

ishowinfo

inte***ce

ishowinfo1

class

animal1

:ishowinfo

,ishowinfo1

}

上述情況中,我們沒法區分實現的是哪乙個介面中的方法,普通實現方法就行不通了。所以,顯式方法就是為了解決這個問題產生的。顯式實現時採取 【介面名.方法名】方式就行了。如下所示:

class

animal1

:ishowinfo

,ishowinfo1

void ishowinfo1.

showinfo()

}

1.4介面怎麼呼叫?
class

animal

:ishowinfo

}

animal p1 =

newanimal()

;p1.

showinfo()

;ishowinfo p2 =

newanimal()

;p2.

showinfo()

;

結果如下:

我是動物類,實現了showinfo

()介面。

我是動物類,實現了showinfo

()介面。

class

animal1

:ishowinfo

}

animal1 p3 =

newanimal1()

; //error

(p3 as ishowinfo)

.showinfo()

;ishowinfo p4 =

newanimal1()

;p4.

showinfo()

;

結果如下:

我是動物類,顯式方法實現了showinfo

()介面。

我是動物類,顯式方法實現了showinfo

()介面。

可以發現,顯式實現的介面方法在類中都是私有的,無法通過類的例項物件直接呼叫,需要把例項先轉型成為對應的介面型別再進行呼叫。

1.4介面有什麼作用?

介面的主要目的是為不相關的類提供通用的處理服務,實現多型。由於c#中只允許樹形結構中的單繼承,即乙個類只能繼承乙個父類,所以介面是讓乙個類具有兩個以上基類的唯一方式。一介面解決了類的多繼承,又能使類繼承後體積不那麼龐大。

2.介面實現多型的例子

ishowinfo.cs

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace _3.介面_demo2

}

car.cs

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace _3.介面_demo2

public

double price

public

abstract

void

showinfo()

;}public

class

bieke

:car

}public

class

aodi

:car

}}

person.cs

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace _3.介面_demo2

public

int age

public

virtual

void

showinfo()

}class

american

:person

}class

chinese

:person

}class

german

:person

}}

program.cs

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace _3.介面_demo2

public

static

void

register

(ishowinfo i)

}}

結果如下:

我是中國人...

.我是中國人...

.我是美國人...

.我是德國人...

.我是奧迪車!

我是別克車!

C 學習(九)介面

介面定義了所有類繼承介面時應遵循的語法合同。介面定義了語法合同 是什麼 部分,派生類定義了語法合同 怎麼做 部分。介面定義了屬性 方法和事件,這些都是介面的成員。介面只包含了成員的宣告。成員的定義是派生類的責任。介面提供了派生類應遵循的標準結構。介面使得實現介面的類或結構在形式上保持一致。抽象類在某...

JAVA學習之多型(三) 介面實現多型的應用

主機板使用介面,具體的卡實現介面。介面是特殊的類,其中的所有方法和常量有固定的格式。方法都是抽象的 public abstract void 常量 public static final int num 2 inte ce pci class mainboard public void usepci...

day03 介面 多型

介面可以定義一定的規則,利用這些規定給類進行功能擴充套件。定義介面 public inte ce 介面名1 定義介面 public inte ce 介面名2 實現介面 public class 類名 implements 介面名1 介面名2 override public void 方法名2 成員變...