我对抽象类的理解

看了一下现在项目的代码,我真心觉得所有业务代码都是在制造垃圾,也不知道是心血来潮还是怎么样,我觉得自己不能再这么下去了,就想想办法改变一下自己写代码的方式,首先接触到的就是一个我听说了很久但是一直没有搞明白,也一直没有用过的的概念——抽象类

什么是抽象类

先来一个官方一点的解释: abstract 关键字修饰的类称为抽象类,抽象类不能被实例化,抽象类是派生类的基类。关键字:abstract 语法: abstract class 类名 { ………… } 1、一个抽象类可以同时包含抽象方法和非抽象方法。 2、抽象方法只在派生类中真正实现,这表明抽象方法只存放函数原型,不涉及主体代码, 3、派生自抽象类的类需要实现其基类的抽象方法,才能实例化对象。 4、使用 override 关键子可在派生类中实现抽象方法,经 override 声明重写的方法称为重写基类方法,其签名必须与 override 方法的签名相同。

==说实话我觉得只知道概念真心没什么用啊!!!根本不知道怎么用,也不知道什么时候用 #2196F3==

让我理解的话大概就是:同样类型的对象需要做不同样的操作实现同样的目的

可能这么说也不是很明白,那就举个例子说一下:比如说我想开个水果店,我需要进货和卖货,假设我只卖苹果和香蕉,那么我需要这么写

1
2
3
4
5
6
//定义抽象类
abstract class FruitShop//开一家水果店
{
abstract void BuyFruit();//进水果
abstract void SellFruit();//卖水果
}

因为我进水果的方式不一样,我苹果是论斤进的,但是香蕉是论根进的,苹果是按斤卖的,香蕉是按根卖的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//对苹果的操作类
class Apple:FruitShop
{
override void BuyFruit()
{
//这里写怎么论斤进苹果
}
override void SellFruit()
{
//这里写怎么论斤卖苹果
}
}
//对香蕉的操作类
class Banana:FruitShop
{
override void BuyFruit()
{
//这里写怎么论根进香蕉
}
override void SellFruit()
{
//这里写怎么论根卖香蕉
}
}

所以大概可能就是这么用的吧