C# 抽象類和抽象方法
首先,在學習抽象方法的時候,我們必須清楚在C#中為什麽會存在抽象方法,或者說為什麽需要抽象方法。
我們知道,接口可以包含方法的申明和屬性,但是方法中不包含代碼,實現這個接口的方法必須包含接口中的所有方法和屬性,但是現在出現這種情況,假設需要一個“接口”,要求類實現某些方法和屬性,但是需要這這個“接口”中包含一些代碼,從而不必在每個派生類中重復地實現某些方法,對於這種情況,你需要的不是接口,而是一個抽象類(abstract class)。
按照定義,抽象類和一般的類有異同,和接口也有異同。下面筆者將一一為您揭曉。
一、抽象類和一般類的相同點:都可以繼承其他的類或者接口,也可以派生子類,並且都有具體的方法;
不同點:抽象類中有抽象方法,一般類中沒有;抽象類不可以實例化,一般類卻可以;
二、抽象類和接口的相同點:都不能實例化,繼承抽象類的子類必須實現抽象類中的抽象方法,實現接口的子類必須實現接口中的全部方法和屬性。
不同點:抽象類中除了具有抽象方法之外,還有具體的方法。
抽象類與一般類、接口在代碼表示上有所不同:
1、抽象類:abstract class class_abstract_name;
2、一般類:class class_name;
3、接口:interface interface_name;
4、抽象方法:abstract public void test();或者public abstract void test();//抽象方法中必須使用public修飾符。
5、一般方法:public/private/protected/.. void/string/int/... method_name();
6、父類中的虛擬方法:public virtual void test_1();或者virtual public void test_1();//虛擬方法必須使用public修飾符。
7、子類中實現父類的虛擬方法或抽象方法:public override void test_1();或者override public void test_1();
註意:
只有抽象類可以有抽象方法,不過抽象類可以有具體方法。如果把一個抽象方法放在一個類中,就必須標識這個類為抽象類。
實例代碼如下:
[csharp] view plain copy
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace testOverride
- {
- class Program
- {
- static void Main(string[] args)
- {
- Test test = new Test();
- test.test();
- test.test_1();
- test.test_2();//父類中有,子類中沒有的方法,子類依然可以用
- Console.ReadKey();
- }
- }
- abstract class method_abstract
- {
- abstract public void test();
- virtual public void test_1() {
- Console.WriteLine("This is the test 2.");
- }
- public void test_2() {
- Console.WriteLine("This is the test 3.");
- }
- }
- interface Interface
- {
- //接口中的方法和屬性都是public,因此不必輸入public
- void test();
- string test_String { get; set; }//這是接口中的屬性
- }
- class Test:method_abstract,Interface//抽象類當然可以當做父類了,除了上述區別之外,抽象類和一般類沒有任何區別
- {
- public override void test()//實現了抽象類的抽象方法
- {
- Console.WriteLine("this is the test 1.");
- }
- override public void test_1() {//實現了父類中的虛擬方法
- Console.WriteLine("this is the test 1.");
- }
- public string test_String { get; set; }//如果在子類中不實現接口中全部屬性,代碼將會報錯。
- }
- }
代碼運行結果如下所示:
抽象類和抽象方法講解到此結束!
C# 抽象類和抽象方法