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(){...}
}