多态(虚方法、抽象类)
多态:
虚方法(virtual override)
抽象类(abstract override)
class Program { static void Main(string[] args) { //虚方法 /*RealDuck realDuck = new RealDuck(); realDuck.Bark(); MuDuck muDuck = new MuDuck(); muDuck.Bark(); XpDuck xpDuck = new XpDuck(); xpDuck.Bark();*/ RealDuck[] rd = { new RealDuck(), new MuDuck(), new XpDuck() }; for(int i = 0; i < rd.Length; i++) { rd[i].Bark(); } //抽象类练习 //计算圆形的面积 XingZhuang xz = new Circle(5); double area = xz.GetArea(); double perimeter = xz.GetPerimeter(); Console.WriteLine("这个形状的面积是{0:0.00},周长是{1:0.00}", area, perimeter); } } abstract class XingZhuang { //父类,封装子类共有的成员 public abstract double GetArea(); public abstract double GetPerimeter(); } class Circle : XingZhuang { private double _r; public double R { get => _r; set => _r = value; } public Circle(double r) { this.R = r; } public override double GetArea() { return Math.PI*this.R * this.R; } public override double GetPerimeter() { return 2*Math.PI * this.R ; } } class RealDuck { public virtual void Bark() { Console.WriteLine("嘎嘎叫"); } } class MuDuck : RealDuck { public override void Bark() { Console.WriteLine("木头鸭子吱吱叫"); } } class XpDuck : RealDuck { public override void Bark() { Console.WriteLine("橡皮鸭子唧唧叫"); } }