1、基本概念:
抽象类:包含抽象方法的类。如果一个类包含抽象方法,那么该类必须是抽象类,使用 abstract 关键字修饰。
抽象方法 : 只有方法的声明,没有方法体,即没有{},以分号 ; 结尾,使用 abstract 关键字修饰:
抽象方法的语法格式:
【其他修饰符】 abstract 返回值类型 方法名(【形参列表】)
抽象类的语法格式:
【权限修饰符】 abstract class 类名 {
}
【权限修饰符】 abstract class 类名 extend 父类{
}
抽象方法是没有方法体的,有abstract修饰.
Java中规定,如果一个类中包含了抽象方法,那么这个类必须是抽象类,否则编译报错!
详见下图:
2、抽象类的特点
①抽象类本身是不能创建对象的
②抽象类型的变量,只能赋值为它子类对象,即与子类对象构成“多态”引用。
抽象方法是虚方法,子类必须重写
③子类要继承抽象类,如果子类不是抽象类,那么子类就必须重写抽象父类的所有方法
(我们查看报错时其实编译器已经告诉我们了可以用来解决的两种方法,如下)
我们来进一步的了解一下抽象类的使用吧~(^o^)/~
此时我们是不是就可以理解为什么父类Animal中为什么就写一个eat()啦,因为是为了保证每个子类里面都有这个方法(我个人理解就是方便统一管理),为了方便多态引用的使用
④虽然有抽象方法的类必须是抽象类,但是反过来抽象类也可以是没有抽象方法。
为什么没有抽象方法的类要声明为抽象类?
为了不让你创建它的对象,希望你创建它的子对象
⑤抽象类有构造器,子类的首行一定要调用父类的构造器
3、抽象类和非抽象类有什么区别呢?
①抽象类有abstract修饰,可以包含抽象方法
非抽象方法类没有abstract修饰,不可以包含抽象方法
②抽象类不能直接new对象
抽象类可以直接new对象
其他的没有区别~~~