抽象類別,最終類的介紹(初學者很有協助)

來源:互聯網
上載者:User
當定義一個類時,除了聲明類的存取權限之外,有時還需要聲明類的繼承特性。即聲明一個類是否為抽象類別或是最終類,使用abstract修飾符聲明抽象類別,使用final修飾符聲明最終類。

1。抽象類別:

    1〉聲明抽象類別與抽象方法:

   eg.        publicabstractclass PlaneGraphcs1

                 {

                                 publicabstractdouble area(); //分號必不可少

               }

         抽象方法是只有方法聲明而沒有方法體的成員方法。抽象類別中可以不包含抽象方法,但是包含抽象方法的類必須聲明為抽象類別。構造方法,類成員方法不能被聲明為抽象方法。

     2〉抽象類別不能被執行個體化。

抽象類別不能被執行個體化,即使抽象類別中沒有包含抽象類別方法,也不能建立抽象類別的執行個體。下列語句產生語法錯誤:

    PlaneGraphics1 g1 =new PlaneGraphics1();  //語法錯誤,抽象類別不能執行個體化

     3〉抽象類別與抽象方法的作用:

         抽象類別用於描述抽象的概念,抽象方法用於聲明方法的參數和傳回值,抽象方法的具體實現由抽象子類完成。子類必須覆蓋父類的抽象方法。

        抽象類別聲明的抽象方法約定了多個子類共用的方法聲明,每個子類可以根據自身的實際情況,給出抽象方法具體的實現。顯然不同的子類可以有不同的方法實現。因此,一個抽象方法在多個子類中表現出多態性。抽象類別提供了方法聲明與方法實現分離的機制。使得多個不同的子類能夠表現出共同的行為能力。

  4〉抽象方法必須被子類覆蓋:

       由於抽象方法在抽象類別中沒有具體的方法實現,所以抽象方法必須被子類覆蓋。反之,如果一個子類不能覆蓋父類的抽象方法,則該類自己也必須聲明為抽象類別。

    5〉抽象方法的必要性:

如果一個方法需要被子類覆蓋,則必須聲明為抽象方法。 例如PlaneGraphics1類也可以聲明area()方法不是抽象方法。則PlaneGraphics1類也不必聲明為抽象類別。聲明如下:

             public class PlaneGraphics1   //平面圖形類,非抽象類別

            {

                       public double area()          / /非抽象方法,必須有方法體

                       {

                                return 0;

                        }

             }

eg .

/*
 * 本例示範抽象類別與抽象方法的作用。聲明抽象類別PlaneGraphics1及兩個子類,子類分別覆蓋area()抽象方法,
 * 實現不同圖形的面積計算。
 */
public abstract class PlaneGraphics1 {         //平面圖形類,抽象類別
 private String shape;      //形狀
 public PlaneGraphics1(String shape)
 {
  this.shape=shape;
 }
 public PlaneGraphics1()
 {
  this("未知");
 }
 public abstract double area();       //計算面積,抽象方法,分號";"必不可少
 public void print()                  //顯示面積,非抽象方法
 {
  System.out.println(this.shape+"面積為 "+this.area());
 }
}
//===========================================================================

//設計長方形類Rectangle1,繼承平面圖形類
public class Rectangle1 extends PlaneGraphics1{
 protected double length;     //長度
 protected double width;      //寬度
 public Rectangle1(double length,double width)     //構造方法
 {
  super("長方形");
  this.length=length;
  this.width=width;
 }
 public Rectangle1(double width)       // 正方形是長方形的特例
 {
  super("正方形");
  this.length=width;
  this.width=width;
 }
 public Rectangle1()
 {
  this(0,0);
 }
 public double area()      //計算長方形面積,實現父類的抽象方法
 {
  return this.width*this.length;
 }
}
//======================================================================

public class Elipse1 extends PlaneGraphics1 {        //橢圓類
 protected double radius_a;      //a軸半徑
 protected double radius_b;      //b軸半徑
 public Elipse1(double radius_a,double radius_b)  //構造方法
 {
  super("橢圓");
  this.radius_a=radius_a;
  this.radius_b=radius_b;
 }
 public Elipse1(double radius_a)       //圓是橢圓的特例
 {
  super("圓");
  this.radius_a=radius_a;
  this.radius_b=radius_a;
 }
 public Elipse1()
 {
  this(0,0);
 }
 public double area()                  //計算橢圓的面積,實現父類的抽象方法
 {
  return Math.PI*this.radius_a*this.radius_b;
 }
}

//=========================================================================
class PlaneGraphics1_ex {

 /**
  * 使用平面圖形類及子類
  */
 public static void main(String[] args) {
  PlaneGraphics1 g1=new Rectangle1(10,20);  //獲得子類長方形執行個體
  g1.print();       //print()不時運行時多態性,其中調用的area()表現運行時多態性
  g1=new Rectangle1(10);      //正方形
  g1.print();
  g1=new Elipse1(10,20);     //橢圓
  g1.print();
  g1=new Elipse1(10);        //圓
  g1.print();
 }
}

運行結果如下:

長方形面積為 200.0
正方形面積為 100.0
橢圓面積為 628.3185307179587
圓面積為 314.1592653589793

2.最終類:

1〉聲明最終類:

    使用關鍵字fianl聲明的類稱為最終類,最終類不能被繼承,即不能聲明最終類的子類。  public final class Math extends Object     //數學類,最終類

如果不希望一個類被繼承,則聲明該類為最終類。

抽象類別不能被聲明為最終類。

2〉聲明最終方法:

    使用final聲明成員方法稱為最終方法,最終方法不能被子類覆蓋。

  public class Circle1 extends Graphics1

{

         public final double area()     //最終方法,不能被子類覆蓋

        {

                      return Math.PI*this.radius*this.radius;

          }

}

最終類可以不包含最終方法,非最終類可以包含最終方法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.