1.abstract方法隻能在抽象類中聲明,虛方法則不是。
abstract方法必須在派生類中重寫,而virtual則不必
2.abstract方法不能聲明方法實體,
abstract public void SD();
虛方法則可以
public virtual void sdf()
{
Console.WriteLine("A");
}
3.虛方法可以實作多态,而抽象方法不可以。。。
================================================================
c#中的interface abstract 與 virtual
interface用來聲明接口
1.隻提供一些方法規約,不提供方法主體. 如:
public interface IPerson
{
void getName();//不包含方法主體
}
2.方法不能用public abstract等修飾,無字段變量,無構造函數。
3.方法可包含參數。 如
void getAge(string s);
一個例子(例1):
IPerson(); //錯誤
string name; //錯誤
public void getIDcard();//錯誤
void getName(); //right
void getAge(string s); //right
實作interface的類
1.與繼承類的格式一緻,如 public class Chinese:IPerson{}
2.必須實作 interface 中的各個方法
例2,繼承例1
public class Chinese:IPerson
public Chinese(){} //添加構造
public void getName(){} //實作getName()
public void getAge(string s){} //實作getAge()
abstract聲明抽象類、抽象方法
1.抽象方法所在類必須為抽象類
2.抽象類不能直接執行個體化,必須由其派生類實作。
3.抽象方法不包含方法主體,必須由派生類以override方式實作此方法,這點跟interface中的方法類似
如
public abstract class Book
public Book()
{
public abstract void getPrice(); //抽象方法,不含主體
public virtual void getName() //虛方法,可覆寫
Console.WriteLine("this is a test:virtual getName()");
public virtual void getContent() //虛方法,可覆寫
Console.WriteLine("this is a test:virtual getContent()");
public void getDate() //一般方法,若在派生類中重寫,須使用new關鍵字
Console.WriteLine("this is a test: void getDate()");
}
public class JavaBook:Book
public override void getPrice() //實作抽象方法,必須實作
{
Console.WriteLine("this is a test:JavaBook override abstract getPrice()");
}
public override void getName() //覆寫原方法,不是必須的
Console.WriteLine("this is a test:JavaBook override virtual getName()");
測試如下:
public class test
public test()
{
JavaBook jbook=new JavaBook();
jbook.getPrice(); //将調用JavaBook中getPrice()
jbook.getName(); //将調用JavaBook中getName()
jbook.getContent(); //将調用Book中getContent()
jbook.getDate(); //将調用Book中getDate()
}
public static void Main()
test t=new test();
virtual标記方法為虛方法
1.可在派生類中以override覆寫此方法
2.不覆寫也可由對象調用
3.無此标記的方法(也無其他标記),重寫時需用new隐藏原方法
abstract 與virtual : 方法重寫時都使用 override 關鍵字