C# 是面向对象的程序设计语言,每一个函数都属于一个类。 overrride:表示重写 这个类是继承于Shape类 一个生动的例子 :老爸表示基类(被继承的类) 儿子表示子类(继承的类) 老爸用virtual告诉儿子:"孩子,你要继承我的事业,在这块上面可以自己继续发展你自己的" 儿子用override告诉全世界:"这个我可不是直接拿我爸的,他只是指个路给我,是我自己奋斗出来的" 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使用 using System; |