C#和数据库高级:抽象类和抽象方法
文章目录
- 一、为什么使用抽象类和抽象方法?
- 1.1、父类与子类的相互转换
- 二、抽象类和抽象方法
- 2.1、抽象类的定义和方法声明规范
- 2.2、使用继承多态的机制解决问题
- 三、抽象类的概念和使用特点
- 总结
一、为什么使用抽象类和抽象方法?
1.1、父类与子类的相互转换
1、给Cat和Dog类分别添加hava的方法
class Cat : Animal
{
#region
public Cat(string name, string color, string kind, string favorite)
: base(name, color, kind)
{
this.Favorite = favorite;
}
#endregion
//吃饭
public override void Have()
{
Console.WriteLine("我们要吃香喷喷的烤鱼啦!");
}
}
class Dog : Animal
{
#region
public Dog(string name, string color, string kind, string favorite)
: base(name, color, kind)
{
this.Favorite = favorite;
}
#endregion
//吃饭
public override void Have()
{
Console.WriteLine("我们要吃香喷喷的排骨啦!");
}
}
2、实现父类的子类转化。
父类类型可以添加子类对象,子类自动转化成父类类型,但是在取值的时候,必须判断是哪一个子类的对象,父类类型的对象必须强制转换成子类对象,因为父类无法调用子类的方法。
由于父类不能调用子类的方法,所以这种方法非常的麻烦,所以我们可以使用抽象类和抽象方法,来解决这种问题。
二、抽象类和抽象方法
2.1、抽象类的定义和方法声明规范
2.2、使用继承多态的机制解决问题
{
//创建一只狗和一只猫
Cat objCat = new Cat("球球儿", "黄色", "小花猫", "小鱼");
Dog objDog = new Dog("棒棒", "黑色", "小黑狗", "排骨");
//将子类对象添加的父类集合
List<Animal> list = new List<Animal>();
list.Add(objCat);
list.Add(objDog);
//取出子类对象
foreach (Animal obj in list)
{
obj.Have();
}
Console.ReadLine();
}
三、抽象类的概念和使用特点
- 使用关键字abstract修饰的类,称为为抽象类。
- 抽象类只是用来列举一个类所具有的行为,不能单独通过创建对象来使用,如Animalanimal=newAnimal0),这种实例化抽奖类的行为是错误的。
- 抽象类中可以有抽象方法,也可以没有任何抽象方法。
- 抽象类不能是静态的(static)或密封的(sealed)。
- 抽象方法必须在抽象类中定义,不能在普通类中使用。
- 抽象方法只是一个方法的声明,不能有任何方法体。
- 抽象方法仅仅表示一个应该具有的行为,具体实现由其子类实现。
- 抽象方法在子类中被实现(重写)必须使用关键字override子类必须重写父类的所有抽象方法,除非子类本身也是抽象类,
总结
抽象类不能实例化,不能是静态方法,子类必须重写,不能有方法体。