多型(虛方法、抽象類)
阿新 • • 發佈:2022-03-30
多型:
虛方法(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("橡皮鴨子唧唧叫"); } }