首先我们要明确,抽象类是一个可以被继承的类(通常作为父类设计),但只有当其他类明确继承它时,它才成为父类,如果没有任何类继承该抽象类,它只是一个独立的抽象类。以下我所要讲的是指作为父类的,有子类继承的抽象类,抽象方法也是一样,没考虑少数情况。
抽象类
public abstract class 父类名 { }
在我们给父类进行如上的抽象设置后,我们会发现好像没有什么变化,子类所继承的属性一个都没少,那么抽象类体现在哪里呢?
我给父类起名为Animal类,我们会发现,在测试类中,我们无法创建一个新的Animal类对象,没错,这就是抽象类的作用,禁止父类创造对象.
用通俗的话来讲,"父类"的东西被家里的"抽象"给扣了,"父类"自己不能直接拿出去潇洒,但是对于家里的"子类"没有影响,"子类"该继承的还是一个都没少,"子类"依然可以拿着"父类"的东西出去耍.
抽象方法
public abstract void 方法名();
以上是抽象方法定义的格式
只有方法声明而没有方法实现(没有方法体,也就是{ })
必须在抽象类或接口中声明 (这里在抽象类中展示)
要求子类必须提供具体实现 (除非子类对该方法也选择了抽象处理)
如上图,我们对父类中的eat方法变成了抽象方法,那么子类会发生什么呢?
是的,我们会发现刚创建出来的子类,只要继承了有抽象方法的父类,就会报错,那么系统给我们的解决方案又是什么呢?
没错,系统告诉我们,要么子类也变成抽象类,要么重写父类的方法.
抽象方法的意义就是要求子类必须重写该方法,不能直接继承.
用通俗的话来讲,"父类"和"子类"的"小金库"也被"抽象"发现了,现在"父类"的"小金库"被严防死守,"子类"想出去耍只能自立更生,自己从新创建一个"小金库",也就是重写方法.
结语
看完抽象类和抽象方法的功能后,大多数人的第一反应是没什么用,实际上在我们自己学习的时候,基本是用不上该方法的,但是到了一些大项目的时候,为了提高数据的安全性,抽象的用处就上来了,还是那句话,你可以不用,但你不能没有.