结论:
abstract方法:
- 不能有方法体
- 只能出现在abstract类中
virtual方法必须有方法体。
父类中的abstract方法、virtual方法都是要被子类override实现继承的。
*
* abstract方法只能出现在abstract类中
*
* abstract方法不能有方法体
*
* abstract方法必须被子类实现继承
*
* 子类继承父类的abstract方法时,必须要有override关键字
*
*
* override不可以重static方法和非virtual方法
*
* new 修饰符用于显示隐藏从基类继承的成员,即子类中的方法是调用new关键字新定义出来的,而不是基类的方法
*
*
*
测试源码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
public abstract class Animal
{
public Animal()
{
Saying();
}
/*
* abstract方法只能出现在abstract类中
*
* abstract方法不能有方法体
*
* abstract方法必须被子类实现继承
*
* 子类继承父类的abstract方法时,必须要有override关键字
*
*/
public abstract void Eating();
public void Saying()
{
System.Console.WriteLine("Animal Saying...");
}
public virtual void Flying()
{
System.Console.WriteLine("Animal Flying...");
}
public virtual void Swimming()
{
System.Console.WriteLine("Animal Swimming...");
}
}
public class Duck : Animal
{
public Duck()
{
System.Console.WriteLine("鸭鸭鸭鸭鸭鸭...");
}
public void Saying()
{
System.Console.WriteLine("嘎嘎嘎嘎...");
}
/*
*
* override不可以重static方法和非virtual方法
*
*/
public override void Flying()
{
System.Console.WriteLine("飞飞飞飞飞飞....");
}
/*
*
* new 修饰符用于显示隐藏从基类继承的成员
* 即子类中的方法时调用new关键字新定义出来的,而不是基类的方法
*
* */
public new void Swimming()
{
System.Console.WriteLine("鸭鸭游游游游游游游...");
}
public override void Eating()
{
System.Console.WriteLine("鸭鸭吃吃吃吃吃...");
}
}
class Program
{
static void Main(string[] args)
{
Animal animal = new Duck();
animal.Saying();
animal.Flying();
animal.Swimming();
animal.Eating();
System.Console.WriteLine("\n---------------------\n");
Duck duck = new Duck();
duck.Saying();
duck.Flying();
duck.Swimming();
duck.Eating();
Console.WriteLine("\nPress any key ...");
Console.ReadLine();
}
}
}
运行结果: