抽象类(abstract)和最终类(final)

分类: java |
用关键字abstract修饰的类就是抽象类,它是所有子类的公共属性(数据)和行为方法的集合,抽象类没有具体对象,是处于组织概念的层次关系而存在的类。下面举例说明为什么要抽象类。
为了描述各种具体的鸟类,如鸽子、麻雀、孔雀、凤凰等,从概念和组织层次关系来看,可以从这些具体的鸟类中抽象出一个并没有具体实例的鸟类。所定义的鸟类具体所有具体鸟类的共同特性。然后通过继承鸟类可以派生鸽子、麻雀、孔雀、凤凰等子类,这样子类中只需描述各种鸟类其自身特点,而不必描述各种具体鸟类的共同特点,这种分层次的组织方式使各种鸟类概念清晰、层析分明、且简单有效并易于扩充。这里的鸟仅仅作为一个抽象概念而存在,代表了所有鸟的共同属性,任何一个具体的鸟都是由鸟的共性加鸟的特性而形成的某个子类的对象。
用关键字abstract修饰的方法就是抽象方法(没有抽象变量),抽象方法只有方法头,后面跟一个分号(;),没有方法体,抽象方法的方法体可在其子类中根据子类的具体情况来实现,抽象方法只存在抽象类或接口中。
声明为final的类不能是父类,即final不再派生子类,final可以用来修饰变量和方法。
final类是处在类的最底层的类,如果没必要再派生子类,通常用final关键字来修饰,表明它是最终类,被final修饰的类通常是有固定作用,完成一定标准功能的类,例如java库中的数学类MATH等。
abstract和final不能同时使用,关键字abstract不能修饰实例变量,也不能与private、static、final等同时修饰一个成员方法,并且abstract类必须在abstract类中。关键字static修饰的方法只能修饰static成员变量,同时static修饰的成员变量和方法不能this引用。
为了描述各种具体的鸟类,如鸽子、麻雀、孔雀、凤凰等,从概念和组织层次关系来看,可以从这些具体的鸟类中抽象出一个并没有具体实例的鸟类。所定义的鸟类具体所有具体鸟类的共同特性。然后通过继承鸟类可以派生鸽子、麻雀、孔雀、凤凰等子类,这样子类中只需描述各种鸟类其自身特点,而不必描述各种具体鸟类的共同特点,这种分层次的组织方式使各种鸟类概念清晰、层析分明、且简单有效并易于扩充。这里的鸟仅仅作为一个抽象概念而存在,代表了所有鸟的共同属性,任何一个具体的鸟都是由鸟的共性加鸟的特性而形成的某个子类的对象。
用关键字abstract修饰的方法就是抽象方法(没有抽象变量),抽象方法只有方法头,后面跟一个分号(;),没有方法体,抽象方法的方法体可在其子类中根据子类的具体情况来实现,抽象方法只存在抽象类或接口中。
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif//Figure.java
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif public abstract class Figure
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif protected double x;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif Figure()
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{}
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif Figure( double x1 )
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif x = x1 ;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif abstract public double area();
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif public String toString();
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif return "x=" + x;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif //circle.java
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif public class Circle extends Figure //圆类
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif public Circle( double x1 )
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif super(x1);
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif public double area() //具体实现父类的抽象方法,求圆面积
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif return 3.1415926 * x * x ;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif public String toString()
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif return "圆: " + super.toString()+ " aea" + area();
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif //Rectangel.java
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif public class Rectangle extends Figure
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif protected double y;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif public Rectange()
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{}
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif public Rectange( doule a,double b )
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif super(a);
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif y=b;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif public double area() //具体实现父类的抽象方法,求长方形面积
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif return x * y ;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif public String toString()
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif return "长方形: " + super.toString() + " y=" + y + " area" + area();
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif //TestFigure.java
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif public class TestFigure
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif public static void main(String[] args)
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif Rectangle R1 = new Rectangle(10.0 , 20.0);
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif Circle C1 = new Circle(10.0);
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif System.out.println(R1.toString());
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif System.out.println(C1.toString());
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif public abstract class Figure
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif protected double x;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif Figure()
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{}
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif Figure( double x1 )
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif x = x1 ;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif abstract public double area();
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif public String toString();
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif return "x=" + x;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif //circle.java
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif public class Circle extends Figure //圆类
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif public Circle( double x1 )
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif super(x1);
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif public double area() //具体实现父类的抽象方法,求圆面积
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif return 3.1415926 * x * x ;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif public String toString()
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif return "圆: " + super.toString()+ " aea" + area();
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif //Rectangel.java
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif public class Rectangle extends Figure
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif protected double y;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif public Rectange()
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{}
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif public Rectange( doule a,double b )
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif super(a);
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif y=b;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif public double area() //具体实现父类的抽象方法,求长方形面积
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif return x * y ;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif public String toString()
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif return "长方形: " + super.toString() + " y=" + y + " area" + area();
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif //TestFigure.java
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif public class TestFigure
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif public static void main(String[] args)
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif ...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif Rectangle R1 = new Rectangle(10.0 , 20.0);
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif Circle C1 = new Circle(10.0);
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif System.out.println(R1.toString());
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif System.out.println(C1.toString());
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif }
声明为final的类不能是父类,即final不再派生子类,final可以用来修饰变量和方法。
final类是处在类的最底层的类,如果没必要再派生子类,通常用final关键字来修饰,表明它是最终类,被final修饰的类通常是有固定作用,完成一定标准功能的类,例如java库中的数学类MATH等。
abstract和final不能同时使用,关键字abstract不能修饰实例变量,也不能与private、static、final等同时修饰一个成员方法,并且abstract类必须在abstract类中。关键字static修饰的方法只能修饰static成员变量,同时static修饰的成员变量和方法不能this引用。