1. 程式人生 > 其它 >多型(虛方法、抽象類)

多型(虛方法、抽象類)

多型:

虛方法(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("橡皮鴨子唧唧叫"); } }