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(); } }
//另外,还可以使用下面的代码隐藏基类方法: public class MyBaseClass { public virtual void DoSomething() { Console.WriteLine("Base imp"); } }
public class MyDerivedClass:MyBaseClass { new public void DoSomething() { Console.WriteLine("Derived imp"); } } //基类方法不必是虚拟的,但结果是一样的,上面的代码只需要修改行。 //对于基类的虚拟方法和非虚拟方法来说,其结果如下: Base imp //尽管隐藏了基类的执行代码,但仍可以通过基类访问它。