介面與抽象類
一,介面的使用
二,介面和抽象類
問題一,介面的使用
如下的列子
interface IFly
{
void Fly();
}
class Bird : IFly
{
public void Eat()
{
}
#region 實現介面
public void Fly()
{
//用翅膀飛
}
#endregion
}
class Plan : IFly
{
#region IFly 成員
public void Fly()
{
//噴氣飛行
}
#endregion
}
static class Mid
{
public static IFly GetBirdFly()
{
return new Bird();
}
public static IFly GetPlanFly()
{
return new Plan();
}
}
class Test
{
IFly Birds = Mid.GetBirdFly();
public void Tests()
{
Birds.Fly();
Birds.Eat();//錯誤。找不到相關的方法!
}
}
從上面的列子可以看出,當你申明瞭一個介面以後。你只是說明了 繼承這個介面的類 可以做什麼
具體怎麼做。需要你再派生類中實現!
當你公佈一個介面,並給出相應的靜態方法時。使用者只能使用該介面的方法,而不可以使用那麼是派
生類中的公共方法!
這時候會有人說。這樣的話。抽象類 也可以實現。
沒錯。抽象類也可以完成上面的功能;
這時候我們再對上面的列子進行擴充!
比如。我們現在要詳細區分各種型別的鳥,飛機
如,噴氣飛機,戰鬥機
鷹,鴿子
這時我們要對上面的程式碼進行修改
先讓我們完全用介面來實現
interface IFly
{
void Fly();
}
interface I攻擊
{
void 攻擊();
}
interface I吃加油
{
void 吃();
}
interface I乘坐
{
void 乘坐();
}
interface I送信
{
void 送信();
}
class 噴氣飛機 : IFly, I乘坐,I吃加油
{
#region IFly 成員
public void Fly()
{
throw new NotImplementedException();
}
#endregion
#region II乘坐 成員
public void 乘坐()
{
throw new NotImplementedException();
}
#endregion
#region I吃加油 成員
public void 吃()
{
throw new NotImplementedException();
}
#endregion
}
class 戰鬥機 : IFly, I乘坐, I吃加油,I攻擊
{
#region IFly 成員
public void Fly()
{
throw new NotImplementedException();
}
#endregion
#region I乘坐 成員
public void 乘坐()
{
throw new NotImplementedException();
}
#endregion
#region I吃加油 成員
public void 吃()
{
throw new NotImplementedException();
}
#endregion
#region I攻擊 成員
public void 攻擊()
{
throw new NotImplementedException();
}
#endregion
}
class 鷹 : IFly, I吃加油, I攻擊
{
#region IFly 成員
public void Fly()
{
throw new NotImplementedException();
}
#endregion
#region I吃加油 成員
public void 吃()
{
throw new NotImplementedException();
}
#endregion
#region I攻擊 成員
public void 攻擊()
{
throw new NotImplementedException();
}
#endregion
}
class 鴿子 : IFly, I吃加油, I送信
{
#region IFly 成員
public void Fly()
{
throw new NotImplementedException();
}
#endregion
#region I吃加油 成員
public void 吃()
{
throw new NotImplementedException();
}
#endregion
#region I送信 成員
public void 送信()
{
throw new NotImplementedException();
}
#endregion
}
如上述的情況。我們如使用抽象類,則實現起來就比較複雜,因為類只能繼承一個抽象類。
我們不得不為每個具體的例項類去寫合適的抽象類。
但是似乎上面的程式碼又顯得有些囉嗦。如 噴氣飛機和戰鬥機,他們都有區域性相同性,他們都是飛機,他
們要加油,都可以飛,都可以乘坐,唯一的不同是,噴氣飛機不能攻擊,而戰鬥機可以攻擊。
鷹和鴿子也一樣,他們都具有相同的行為,同時有具有不同的行為
我們修改下面的方法
interface IFly
{
void Fly();
}
interface I攻擊
{
void 攻擊();
}
interface I送信
{
void 送信();
}
abstract class 飛機
{
public abstract void 乘坐();
public abstract void 加油();
}
abstract class 鳥
{
public abstract void 吃();
}
class 噴氣飛機 : 飛機,IFly
{
#region IFly 成員
public void Fly()
{
throw new NotImplementedException();
}
#endregion
public override void 乘坐()
{
throw new NotImplementedException();
}
public override void 加油()
{
throw new NotImplementedException();
}
}
class 戰鬥機 : 飛機,IFly,I攻擊
{
#region IFly 成員
public void Fly()
{
throw new NotImplementedException();
}
#endregion
#region I攻擊 成員
public void 攻擊()
{
throw new NotImplementedException();
}
#endregion
public override void 乘坐()
{
throw new NotImplementedException();
}
public override void 加油()
{
throw new NotImplementedException();
}
}
class 鷹 : 鳥,IFly, I攻擊
{
#region IFly 成員
public void Fly()
{
throw new NotImplementedException();
}
#endregion
#region I攻擊 成員
public void 攻擊()
{
throw new NotImplementedException();
}
#endregion
public override void 吃()
{
throw new NotImplementedException();
}
}
class 鴿子 :鳥, IFly, I送信
{
#region IFly 成員
public void Fly()
{
throw new NotImplementedException();
}
#endregion
#region I送信 成員
public void 送信()
{
throw new NotImplementedException();
}
#endregion
public override void 吃()
{
throw new NotImplementedException();
}
}
這次我們使用了抽象類來定義了兩個抽象的事物,1 飛機,2鳥,他是抽象的,我們無法從飛機或者鳥中
給你一個具體的飛機,或者一隻具體的鳥,但是所有的飛機和鳥都有這個抽象的行為,或者能力,
同時。不同的例項有具有不同的能力,如 攻擊,和送信。
當然。我們可以再飛機的抽象類中加入一個飛的方法
但是我們使用介面來做是因為,鳥也可以飛,
這兩類不同的事物再這裡有相同的行為,只不過他們的實現不同而已。
我認為介面和抽象類並不存在用這個好,用那個不好的情況,我認為要從他們中級找出一個分界線,他
們在一個程式中應該根據程式的需求而相互扶助,已達到期望的效果
這就是我這幾天所理解的介面和抽象類,不知道理解的是否正確,還希望大家指點!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-566607/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 抽象類與介面抽象
- java中的抽象類與介面Java抽象
- Java的抽象類與介面理解Java抽象
- Java總結-抽象類與介面Java抽象
- 抽象類和介面抽象
- 抽象類VS介面抽象
- Java中的介面與抽象類詳解Java抽象
- PHP中的抽象類、介面與性狀PHP抽象
- Java中抽象類與介面的區別Java抽象
- 抽象類 & 介面比較抽象
- Java的抽象類 & 介面Java抽象
- 介面和抽象類 (abstract)抽象
- 介面的行為抽象和抽象類的行為抽象抽象
- 介面和抽象類詳解抽象
- 抽象類及介面詳解抽象
- java中抽象類和介面Java抽象
- Java中的介面與抽象類設計原則Java抽象
- Java基礎10 介面的繼承與抽象類Java繼承抽象
- Java:面試題:抽象類與介面的區別Java面試題抽象
- Java 的抽象類, 介面以及內部類Java抽象
- 介面(抽象類)與後期靜態繫結學習抽象
- Java抽象類和介面 小白版Java抽象
- 介面和抽象類的區別抽象
- Java基礎-抽象類和介面Java抽象
- Java 介面與抽象方法Java抽象
- 介面、抽象類、普通類之間的關係抽象
- 【JAVA】筆記(5)--- final;抽象方法;抽象類;介面;解析繼承,關聯,與實現;Java筆記抽象繼承
- 介面是否可繼承(extends)介面? 抽象類是否可實現 (implements)介面? 抽象類是否可繼承具體類(concrete class)?繼承抽象
- 抽象類和介面,你瞭解多少?抽象
- 走進C# abstract,瞭解抽象類與介面的異同C#抽象
- JAVA基礎之三-介面和抽象類Java抽象
- 關於抽象類和介面的初步理解抽象
- 這次,徹底弄懂介面及抽象類抽象
- java介面和抽象類的簡單理解Java抽象
- Java中抽象類和介面的區別Java抽象
- PHP中的 抽象類(abstract class)和 介面(interface)PHP抽象
- 結合實戰理解 Java 抽象類和介面Java抽象
- C#介面、抽象類、普通類和繼承(子類與父類)都有其特定的用途和場景C#抽象繼承
- 帶你看破介面抽象與工廠抽象