抽象类
使用关键字abstract声明的类称为抽象类,使用abstract声明的成员方法称为抽象方法。抽象方法只有方法声明没有方法体,例如下面的func1就为抽象方法
public abstract class AbstractClassExample {protected int x;private int y;public abstract void func1();public void func2() {System.out.println("func2");}
}
如果一个类中包含抽象方法,那么这个类必须声明为抽象类。
抽象类和普通类最大的区别是,抽象类不能被实例化,只能被继承。
例如:AbstractClassExample ace=new AbstractClassExample().这就是错误的
由于上述这个类中func1为抽象方法,所以类AbstractClassExample就得定为抽象类,添加abstract关键字
另外需要注意,构造方法、静态成员方法不能被声明为抽象方法
抽象类通常包含抽象方法,也可以不包含抽象方法。但是,包含抽象方法的类必须被声明为抽象类。如果一个类声明继承一个抽象类,它必须实现父类的所有抽象方法,否则该类必须声明为抽象类。
例如:
public class AbstractExtendClassExample extends AbstractClassExample {@Overridepublic void func1() {System.out.println("func1");}
}
抽象类中,声明抽象方法是为子类的共同操作约定的一种方法声明;子类继承抽象类的抽象方法,继承了父类的约定,再根据自身的实际需要给出抽象方法的具体实现。不同的子类可有不同的方法实现。总之,抽象方法不仅使子类具有共同的行为能力,还能实现运行时多态,“一种声明,多种实现”。后续我们还会学习到接口,对于接口来说,接口内所有方法都需重写
最终类
使用关键字final声明的类称为最终类,最终类不能被继承,即不能有子类。
例如:public final class Math extendsObject//数学类,最终类
public class MyMath extends Math//语法错,最终类不能被继承
public final class Circle extends Ellipse//圆类,最终类,不能被继承
注意:抽象类不能被声明为最终类
使用final声明的成员方法称为最终方法。最终方法不能被子类覆盖。最终类中包含的都是最终方法。非最终类也可以包含最终方法。