抽象类和虚方法的区别:
虚方法父类有实现,抽象类父类无实现,不能用父类实例化。
using System; namespace AbstractTest { class Program { static void Main(string[] args) { Animal animal = new Dog(); animal.Say();// 输出结果:Wang Animal animal2 = new Cat(); animal2.Say();// 输出结果:Miao Console.ReadLine(); } } //抽象类 public abstract class Animal { //抽象方法不具有方法体 public abstract void Say(); } class Dog : Animal { public override void Say() { Console.WriteLine("Wang"); } } class Cat : Animal { public override void Say() { Console.WriteLine("Miao"); } } }
可能用到的场景:
using System; namespace AbstractTest { class Program { static void Main(string[] args) { Shape shape1 = new Circle(3);//声明一个形状,用圆形类实例化参数半径为3的一个对象。 Console.WriteLine($"圆形形状面积为:{shape1.GetArea()},形状周长为:{shape1.GetPerimeter()}"); Shape shape2 = new Rectangle(3,1.5);//声明一个形状,用矩形类实例化参数长为3宽为1.5的一个对象。 Console.WriteLine($"矩形形状面积为:{shape2.GetArea()},形状周长为:{shape2.GetPerimeter()}"); Console.ReadLine(); } } //图形是抽象类型,各种形状都有可能,没有固定形状 abstract class Shape { public abstract double GetArea();//获得形状的面积 public abstract double GetPerimeter();//获得形状的周长 } //圆形也是形状的一种,所以继承自Shape class Circle : Shape { //构造方法初始化圆形的半径 public Circle(double r) { R = r; } //圆形的自有属性-半径 public double R { get; set; } //重写父类的函数 public override double GetArea() { return Math.PI * R * R; //圆面积πr2 } public override double GetPerimeter() { return 2 * Math.PI * R; //圆周长2πr } } //矩形也是形状的一种,一样是继承自Shape class Rectangle : Shape { //构造方法初始化矩形的长和宽 public Rectangle(double length,double width) { Length = length; Width = width; } //矩形的自有属性长 public double Length { get; set; } //矩形的自有属性宽 public double Width { get; set; } public override double GetArea() { return Length * Width;//矩形面积为长*宽 } public override double GetPerimeter() { return 2 * (Length + Width);//矩形周长为长加宽乘以2 } } }
原文:https://www.cnblogs.com/RuinGames/p/14827540.html