类、构造器、属性、方法
抽象的使用
就是父类无法全部具体实现,而是由子类提供具体实现的,对象的,类
abstract:抽象的,可以用来修饰类、方法
abstract修饰类(抽象类)
①不可被实例化
②抽象类有构造器(凡是类都有构造器,为了保证创建类的时候有实例化的过程)
abstract修饰方法(抽象方法)
①格式没有方法体、没有{}。例如public abstract void eat();
②抽象方法只保留方法的功能,具体的执行,交给继承抽象类的子类,由子类重写此抽象方法
③抽象方法所在的类一定是抽象类
④抽象类可以没有抽象方法
⑤若子类继承抽象类,重写了所有的抽象方法:此类就能实例化,创建对象
⑥若子类继承抽象类,没有重写所有的抽象方法:此类中仍然有抽象方法,则此类必须声明为抽象的,那么此类就不能实例化,创建对象
⑦不影响多态的使用,还是调用子类的方法
抽象类的子类如果没有重写抽象类中的任何一个方法,那么这个子类必须也是抽象类,因为抽象方法所在的类必须是抽象类,否则不满足抽象规则。要么重写方法,要么定义抽象类。因为子类继承了父类,子类可以调用父类非私有的方法,这一调用就调用到抽象方法上了。
抽象类:是在继承基础上衍生出来的,有继承才有抽象,光抽象没什么用
多态:也是在继承基础上衍生出来的,将子类赋给父类,用父类对象调用子类的方法
注意
abstract不能修饰:属性、构造器
属性
①规定不让用
②这是一种思想,抽象的目的①对于类来讲,不能让此类实例化②对于方法来讲,让子类重写(子类可以覆盖)。
③属性不能覆盖,子类用子类的,父类用父类的,都存在堆空间
构造器
①因为构造器不能重写
abstract不能和private、final、static共用
private:私有的,出了类就能访问,子类不能覆盖(或重写)声明为private的方法
final:最终的,不能被重写,而abstract又需要子类重写父类的方法
static:可以修饰属性、方法、代码块、内部类
因为一个声明为静态的就可以通过类来调用,而abstract修饰的不能调用