請考慮以下示例。我有一個MyInterface接口,然後是兩個抽象類MyAbstractClass1和MyAbstractClass2。 MyAbstractClass1實現MyInterface,但MyAbstractClass2不。需要幫助瞭解實現接口的抽象類
現在我有三個具體的類。
- MyConcreteClass1派生自MyAbstractClass1但未實現MyInterface。
- MyConcreteClass2派生自MyAbstractClass2,但實現了MyInterface。
- MyConcreteClass3從MyAbstractClass1派生,並實現MyInterface。
ConcreteClass1是否也隱含地實現MyInterface,因爲它來自MyAbstractClass1?假設MyAbstractClass1隱式地實現了MyInteface的方法,那麼ConcreteClass1不應該被轉換爲MyInterface來訪問MyInteface方法嗎?
MyAbstractClass1可以隱式實現一個MyInterface方法作爲抽象方法,但不能顯式實現一個MyInterface方法作爲抽象方法。爲什麼是這樣?
MyConcreteClass3過度是因爲它實現了一個已經由其基類實現的接口嗎?即使知道從MyAbstractClass1派生的所有類也應該實現MyInterface,是否還有一個原因會導致這樣做?
這裏的一個類圖
alt text http://files.getdropbox.com/u/113068/abstractclassesandinterfaces.png
下面的代碼:
//interface
public interface MyInterface
{
void MyMethodA();
void MyMethodB();
void MyMethodC();
}
//abstract classes
public abstract class MyAbstractClass1 : MyInterface
{
public void MyMethodA()
{
}
void MyInterface.MyMethodB()
{
}
//Error: "the modifier abstract is not valid for this item"
//abstract void MyInterface.MyMethodC();
//This works
public abstract void MyMethodC();
public abstract void MyMethodZ();
}
public abstract class MyAbstractClass2
{
public void MyMethodX()
{
}
public abstract void MyMethodY();
}
//Concrete classes
//ConcreteClass 1: Only Abstract class implements the interface
public class ConcreteClass1 : MyAbstractClass1
{
public override void MyMethodC()
{
}
public override void MyMethodZ()
{
}
}
//ConcreteClass 1: Only Concrete class implements the interface
public class ConcreteClass2 : MyAbstractClass2, MyInterface
{
public override void MyMethodY()
{
}
public void MyMethodA()
{
}
public void MyMethodB()
{
}
public void MyMethodC()
{
}
}
//ConcreteClass 1: Both concrete and abstract class implement the interface
public class ConcreteClass3 : MyAbstractClass1, MyInterface
{
public override void MyMethodC()
{
}
public override void MyMethodZ()
{
}
}
爲什麼我得到一個downvote? – RCIX 2009-07-10 00:13:49
「堅持」是一個不好的答案... – 2009-07-10 00:14:35