JAVA中的终结类、终结方法 和 抽象类、抽象方法
一.终结类与终结方法:用final修饰的类和方法
1.终结类不能被继承
2.终结方法不能被子类覆盖
栗子:终结类
final class A {.....} //声明A类 为final类
class B extends A {....} //编译器将会报错
栗子:终结方法
class Parent
{
public Parent() { } //构造方法
final int getPI() { return Math.PI} //终结方法
}
Class Child extends Parent
{
public Child() {}
int getPI() { return 3.14;} //错误!,不允许在子类中覆盖超类中的终结方法
}
二.抽象类:类名前加修饰符abstract
1.可包含常规类能包含的任何成员,包括非抽象方法;
2.也可包含抽象方法:用abstract修饰,只有方法原型,没有方法的实现;
3.没有具体实例对象的类,不能使用new方法进行实例化,只能用做超类;
4.只有当子类实现了抽象超类中的所有抽象方法,子类才不是抽象类,才能产生实例。(若子类中扔有抽象放方法未实现,则子类也只能是抽象类)
三.抽象方法: public abstrac <returnType> <methodName> (...);
1.仅有方法原型,而没有方法体;
2.抽象方法的具体实现由子类在它们各自的类声明中完成;
3.只有抽象类可以包含抽象方法。
四.抽象方法的优点
1.隐藏具体的细节信息,所有的子类使用的都是相同的方法原型,其中包含了调用改方法时需要了解的全部信息;
2.强迫子类完成指定的行为,规定所有子类的“标准”行为。
栗子:抽象的绘图类和抽象方法
//各种图形都需要实现绘图方法,可以在它们的抽象超类中声明一个draw抽象方法
abstract class GraphicObject{
int x,y;
abstract void draw(); //希望在所有的图形类中,都能有一个统一的绘图接口,于是定了抽象draw类,而没有具体实现
}
//然后在每个子类中覆盖draw方法,给出自己的具体实现
class Circle extends GraphicObject
{
void draw(){...}
}
class Rectangle extends GraphicObject
{
void draw(){...}
}