温习Java笔记(6):抽象类(abstract)和最终类(final)

    用关键字abstract修饰的类就是抽象类,它是所有子类的公共属性(数据)和行为方法的集合,抽象类没有具体对象,是处于组织概念的层次关系而存在的类。下面举例说明为什么要抽象类。

    为了描述各种具体的鸟类,如鸽子、麻雀、孔雀、凤凰等,从概念和组织层次关系来看,可以从这些具体的鸟类中抽象出一个并没有具体实例的鸟类。所定义的鸟类具体所有具体鸟类的共同特性。然后通过继承鸟类可以派生鸽子、麻雀、孔雀、凤凰等子类,这样子类中只需描述各种鸟类其自身特点,而不必描述各种具体鸟类的共同特点,这种分层次的组织方式使各种鸟类概念清晰、层析分明、且简单有效并易于扩充。这里的鸟仅仅作为一个抽象概念而存在,代表了所有鸟的共同属性,
任何一个具体的鸟都是由鸟的共性加鸟的特性而形成的某个子类的对象。

    用关键字abstract修饰的方法就是抽象方法(没有抽象变量),抽象方法只有方法头,后面跟一个分号(;),没有方法体,抽象方法的方法体可在其子类中根据子类的具体情况来实现,抽象方法只存在抽象类或接口中。

//Figure.java
public abstract class  Figure 
{
    
protected double
 x;
    Figure()
    
{}

    Figure( 
double x1 )
    
{
        x 
=
 x1 ;
    }

    
abstract public double area();
    
public
 String toString();
    
{
        
return "x=" +
 x;
    }


}

//circle.java
public class Circle extends Figure    //圆类
{
    
public Circle( double
 x1 )
    
{
        
super
(x1);
    }

    
public double area()    //具体实现父类的抽象方法,求圆面积
    {
        
return 3.1415926 * x *
 x ;
    }

    
public String toString()
    
{
        
return "圆: " + super.toString()+ " aea" +
 area();
    }

}

//Rectangel.java
public class Rectangle extends  Figure
{
    
protected double
 y;
    
public
 Rectange()
    
{}

    
public Rectange( doule a,double b )
    
{
        
super
(a);
        y
=
b;
    }

    
public double area()    //具体实现父类的抽象方法,求长方形面积
    {
        
return x *
 y ;
    }

    
public String toString()
    
{
        
return "长方形: " + super.toString() + " y=" + y + " area" +
 area();
    }


}

//TestFigure.java
public class  TestFigure
{
    
public static void
 main(String[] args)
    
{
        Rectangle R1 
= new Rectangle(10.0 , 20.0
);
        Circle C1 
= new Circle(10.0
);
        System.out.println(R1.toString());
        System.out.println(C1.toString());
    }



}

    声明为final的类不能是父类,即final不再派生子类,final可以用来修饰变量和方法。
    final类是处在类的最底层的类,如果没必要再派生子类,通常用final关键字来修饰,表明它是最终类,被final修饰的类通常是有固定作用,完成一定标准功能的类,例如java库中的数学类MATH等。
    abstract和final不能同时使用,关键字abstract不能修饰实例变量,也不能与private、static、final等同时修饰一个成员方法,并且abstract类必须在abstract类中。关键字static修饰的方法只能修饰static成员变量,同时static修饰的成员变量和方法不能this引用。

你可能感兴趣的:(Java)