C#中可以创建抽象类,用于提供类的部分成员实现,当某一个类继承自这个抽象类的时候,需要手动实现这个类中的抽象成员
抽象类中可以包含抽象方法,这个抽象方法不能去实现,而是在某个类继承自这个抽象类的时候实现
我们先定义一个抽象类 使用 abstract class 创建一个抽象类,写法和class相同
抽象类中可以定义抽象方法
给某一个方法加上abstract 关键字 把这个方法修饰成抽象方法,抽象方法不需要也不能拥有内容
public abstract class Pet
{
public string Name
{
get;set;
}
public string Health
{
get;set;
}
public string Gender
{
get;set;
}
//抽象方法,又叫做虚方法,自身不去实现,如果有继承关系,子类需要实现该方法
public abstract void Eat();
}
如果继承的是抽象类,那么如果抽象方法没有实现,是在当前类上报错
如果继承的是接口,接口声明的方法没实现,报错的位置在接口名字上
由派生类(普通类)继承抽象类
当某一个类继承自一个抽象类之后,必须实现这个类中的抽象方法
override 重写和实现抽象类中的抽象方法
public class Dog : Pet
{
//跟接口有区别,接口直接实现,抽象类需要重写.
public override void Eat()
{
Console.WriteLine("狗喜欢吃骨头");
}
public void Test()
{
}
}
public class Cat : Pet
{
public override void Eat()
{
Console.WriteLine("狗喜欢吃骨头");
}
}
注意,如果是二次继承,抽象的特性会断掉
我们在继承cat类,抽象类的特征就会断掉
public class SmallCat : Cat
{
}
总结:抽象类和普通类的区别:
1.抽象类不能实例化,普通的类可以实例化u
2.抽象类中可以有抽象方法,也可以有抽象方法,普通的类不能有抽象方法
3.抽象类可以和普通的类一样,有普通的方法
4.抽象类可以继承自抽象类,子类如果不是抽象类,必须重写抽象类的全部抽象方法
5.抽象方法就是被子类重写的,所以不能使用private修饰符
抽象类和接口的区别:
1.都可以定义一个类的契约,一个使用interface关键字,一个使用abstract关键字
2.接口中成员默认就是抽象,包括方法,属性,索引器和事件,但是不能包含字段和构造函数,也不能有 静态成员
3.一个类可以实现多个接口的继承,接口本身不能被实例化,但是类可以