abstract关键字--java16(14/12/2015)

为什么要使用抽象类?

抽象类是用来模型化那些父类无法确定全部实现,而是通过子类提供其全部实现的对象的类。例如父类是几何图形,任何几何图形都有不同的面积计算方法。所以在父类中做个抽象的定义,在每一个子类中重写该计算面积的方法。


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:声明成静态的可以通过类来调用,但是抽象类里面没有方法体,所以通过类来调用静态的没有什么意义。

你可能感兴趣的:(abstract关键字--java16(14/12/2015))