为什么要使用抽象类?
抽象类是用来模型化那些父类无法确定全部实现,而是通过子类提供其全部实现的对象的类。例如父类是几何图形,任何几何图形都有不同的面积计算方法。所以在父类中做个抽象的定义,在每一个子类中重写该计算面积的方法。
abstract:抽象的。可以用来修饰类、方法
1、abstract修饰类:抽象类
1)不可被实例化
2)抽象类有构造器(凡是类都有构造器)
3)抽象方法所在的类,一定是抽象类
4)抽象类可以没有抽象方法
>当我们设计一个类时,不需要创建此类的实例时,就可以考虑将其设置为抽象,由其子类来实现这个类的抽象。
2、abstract修饰方法:抽象方法
1)格式:没有方法体,包括{ },如:public abstract void eat( );
2)抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写此抽象方法。
3)若子类继承了抽象类,并重写了所有的抽象方法,则此类是一个“实体类”,即可以实例化。
4)若子类继承了抽象类,没有重写所有的抽象方法,意味着此类中仍有抽象方法,则此类必须声明为抽象的!
-------------------------------
abstract 不能用来修饰属性、构造器、private、final、static
修饰属性:不可以,abstract用来修饰属性没有意义,因为抽象类是需要在其继承的子类中进行重写的,而方法不管子类是否重写,都不会覆盖父类的属性,所以没必要抽象。所以子类便不能覆盖(重写)声明为private的方法;
修饰构造器:不可以,因为构造器不能够被重写;
修饰private方法:不可以,因为private不能跨类访问,所以哪怕在子类里面有父类的私有方法,也不被认为是重写;
修饰final:不行,定义成final本身就不能被重写,而抽象又需要被重写,所以矛盾;
修饰static:声明成静态的可以通过类来调用,但是抽象类里面没有方法体,所以通过类来调用静态的没有什么意义。