C#基础--Virtual与abstract区别、重写

Virtual作用:子类可以对父类重写,虚方法是对多态特征体现。代表一类对象的所具有的公共属性或方法。

 1  public class Animal
 2     {
 3         public string Name { get; set; }
 4         public virtual void Eat()
 5         {
 6             Console.WriteLine("{0}正在吃草",Name);
 7         }
 8 
 9     }
10     public class Sheep : Animal
11     {
12         public Sheep(){ Name = ""; }
13         public override void Eat()
14         {
15             base.Eat();
16             Console.WriteLine("吃草");
17 
18         }
19 
20     }
21 
22     public class Tigger : Animal
23     {
24         public Tigger() { Name = "老虎"; }
25         public override void Eat()
26         {
27             base.Eat();
28             Console.WriteLine("老虎吃羊");
29 
30         }
31     }
   Animal animal1 = new Sheep();
            Animal animal2 = new Tigger();
            animal1.Eat();
            animal2.Eat();

 abstract作用:子类必须对父类重写,虚方法是对多态特征体现。代表一类对象的所具有的公共属性或方法。

                             如果一个类中包含抽象方法,这个类必须是抽象类。

public abstract class Shape
    {
        public const double Pi = 3.14;
        protected double x, y;
        public Shape()
        {
            x = y = 0;
        }
        public Shape(double x,double y)
        {
            this.x = x;
            this.y = y;
        }
        public abstract double Area(); 

    }
    //矩形
    public class Rectangle : Shape
    {

        public Rectangle() : base() { }//使用基类的构造函数
        public Rectangle(double x, double y) : base( x, y) { }
        public override double Area()
        {
            return x * y;
        }
    }
    //椭圆
    public class Ellipase : Shape
    {
        public Ellipase(double x, double y) : base(x, y) { }
        public override double Area()
        {
            return x * y * Pi;
        }
    }
    //圆形
    public class Round : Shape
    {
        public Round(double x) : base(x, 0) { }
        public override double Area()
        {
            return x*x*Pi;    
        }
    }

  

 double x = 2;
            double y = 3;
            Shape shape1 = new Rectangle(x,y);
            Console.WriteLine("Rectangle:"+ shape1.Area());
            Shape shape2= new Round(x);
            Console.WriteLine("Round:"+ shape2.Area());
            Shape shape3 = new Ellipase(x,y);
            Console.WriteLine("Ellipase:"+shape3.Area());

  

posted @ 2019-08-25 10:32  QueryWord  阅读(261)  评论(0编辑  收藏  举报