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());