例子:创建Vehicle抽象类,并以Vehicle作为基类派生出Car;在Car中重定义Vehicle类的抽象方法和抽象属性;重定义Tostring方法;在Main函数中实现测试。
Program.cs
using System;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
Car car = new Car {
Name = "五菱宏光" };
car.FuelUp();
car.Run();
Console.WriteLine(car);
}
}
public class Car : Vehicle
{
private string _name;
public override string Name {
get => _name; set => _name = value; }
public override void FuelUp()
{
Console.WriteLine(Name + "car fuel up" );
}
public override string ToString()
{
return string.Format("{0} car is a kind of vehicle ",this.Name);
}
}
}
Vehicle.cs
using System;
namespace ConsoleApp2
{
public abstract class Vehicle
{
public abstract string Name {
get; set; }
public void Run()
{
Console.WriteLine("run run run");
}
public abstract void FuelUp();
}
}
**总结:**
1、抽象类和抽象方法使用abstract修饰符声明,抽象类不能被实例化,抽象类只能是其他类的基类。
2、抽象类的子类必须override抽象类中的所有抽象属性和抽象方法;若未全部override,则子类必须是抽象类。
3、抽象类中可以有非抽象属性和非抽象方法,也可以是私有或者公有,但是如果是私有的话子类就不能访问,无意义,所以一般情况下都设置为公有
4、有抽象方法或抽象属性的类一定是抽象类,抽象类中的属性或方法不一定都是抽象的。
5、抽象属性和抽象方法必须是公有的。