C 多型性 抽象類物件引用子類例項

2021-05-23 15:54:56 字數 780 閱讀 1188

c#規定,抽象類不能例項化,如下**會發生編譯錯誤:

animal myanimal=new animal();

那麼如下**正確嗎?

animal myanimal=new dog();

myanimal.cry();

這段**是完全正確的。既然抽象類不能例項化,那麼這段**為什麼又可以執行呢?首先要明確上面的**並沒有例項化抽象類,只是宣告了乙個抽象類的物件myanimal,例項化時必須通過建構函式來實現,這裡呼叫的是子類的建構函式,所以例項化的是子類物件,只是抽象類物件引用了子類例項。那麼這個物件是子類還是父類呢?

using system;

public abstract class animal

}public class dog: animal

public void showdog()

}class progarm

}抽象類物件呼叫了子類的cry()方法和本身show()方法,子類的showdog()方法是不能訪問的。說明抽象物件引用子類例項後,基本上還是屬於抽象類,能夠訪問子類重寫的方法和父類自己的屬性和方法,子類自己的屬性和方法是不能訪問的。

擴充套件:如果有很多種動物,每個動物都要例項化,然後輸出,工作量很大,也不是最佳表達方式。下面用陣列來組織這些動物,主函式中的測試**修改為以下**

animal animals=new animal[3];

foreach (animal a in animals)

注意:抽象類的派生類必須實現所有的抽象方法,必須使用override關鍵字,並且不能是私有的。

C 多型性 (多型性)虛方法 抽象類

多型性 虛方法 1 在父類的方法中加入virtual,這個方法可以被子類重新寫一遍。在子類的方法前加入override 多型就是指不同的物件收到相同的訊息,會產生不同的行為,同乙個類在不同的場合下表現出不同的行為特徵 多型的作用 把不同的子類都看作是父類,可以遮蔽到不同子類物件之間的差異,寫出通用的...

多型性 虛函式 抽象類

一 多型性 指相同物件收到不同訊息或不同物件收到相同訊息時產生不同的實現動作。c 支援兩種多型性 編譯時多型性,執行時多型性。1.編譯時多型性 通過過載函式實現 2.執行時多型性 通過虛函式實現。二 虛函式 虛函式是在基類中被宣告為virtual,並在派生類中重新定義的成員函式。可實現成員函式的動態...

虛方法,抽象類,多型性

code 1.虛方法必須有實現部分,抽象方法沒有提供實現部分,抽象方法是一種強制派生類覆蓋的方法,否則派生類將不能被例項化。如 抽象方法 public abstract class animal 虛方法 public class animal public virtual void eat 2 抽象...