interface用來聲明接口
1.只提供一些方法規約,不提供方法主體
如
public interface iperson
{
void getname();//不包含方法主體
}
2.方法不能用public abstract等修飾,無字段變量,無構造函數。
3.方法可包含參數
如
public interface iperson
{
void getage(string s);
}
一個例子(例1):
public interface iperson
{
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 關鍵字
interface中的方法和abstract方法都要求實現
新聞熱點
疑難解答