其它关键字:
面向对象的三大特征:
abstract 可以修饰:类、方法。
abstract 不能修饰:
- 属性、构造器等
- 私有方法(抽象方法需要在子类中重写,而私有方法无法重写)
- 静态方法(非static的同名同参的方法叫做重写,static 的方法不是重写)
- final 的方法(final 的方法不能被重写)
- final 的类(不能被继承)
一、抽象类
- 使用abstract修饰一个类,该类不能实例化。
- 抽象类中仍然有构造器,便于子类实例化时调用
二、抽象方法
- 只有方法的声明,没有方法体,例如
public abstract void eat();
- 包含抽象方法的类,一定是抽象类。
- 子类需要重写父类中的抽象方法,才能实例化。如果子类没有重写父类所有的抽象方法,那么子类也应是抽象类。
应用
例如之前的练习(2):几何类GeometricObject,为了使子类计算面积的方法顺利运行,需要在父类内也加入计算面积的方法,由于几何图形不能确定,面积无法计算,方法只能return 0.0;
:
public class GeometricObject {
//
...
//
public double findArea(){
return 0.0;
}
}
有了抽象方法以后:
public abstract class GeometricObject {
//
...
//
public abstract double findArea();
}
抽象类的匿名子类
抽象类不能直接创建对象,需要通过子类才能创建子类对象。
创建匿名子类的格式:Class c = new Class(){ // 重写抽象方法};
例如,对于抽象类Person,其中有抽象方法eat(),创建匿名子类:
Person p = new Person(){
@Override
public void eat() {
System.out.println("匿名子类重写抽象方法");
}
};
实际上是创建了匿名子类的对象:p。