java中類的研究

來源:互聯網
上載者:User
1:在Java中使用繼承

  物件導向的程式設計中最為強大的功能是類的繼承,類的繼承允許你在一個已經存在的類之上編寫新的程式,例如,你想建立一個可在螢幕上顯示並能填充它的矩形類,你可以從頭開始或者利用舊的矩形類,下面的部分將向你介紹如何繼承已存在的Rectangle類,而不需重寫其中的代碼。

  比如建立一個fillRect類,該類可以使用Rectangle類中所有已定義的資料和成員函數,如:width、height等資料和getArea等成員函數,就可是使用繼承的方法來實現。使用extands關鍵字讓Java程式員能夠繼承已有類的成員函數,為了繼承Rectangle類,你必須引用舊的Rectangle類,你必須引用舊的Rectangle類,並且在新類的說明中引用它,比如:

import Shapes.Rectangle;

class fillRect extands Rectangle

{

   .....

}

2:成員函數的重載

  繼承之後,如何使fillRect類比Rectangle類有所提高呢?我們可以用如下代碼來實現一個新的drawRect成員函數,它將大大縮短代碼,並能填充矩形,而不是僅僅畫出矩形的輪廓:

private String makeString(chr ch,int num)

{

  StringBuffer str=new StringBuffer();

  for(int i=num;i>0;i--)

  str.append(ch);

  return str.toString();

}

public void drawRect()

{

  for(int i=height;i>0;i--)

  System.out.println(makeString("#",width));

}

  注意這裡我們使用了StringBuffer類。之所以使用StringBuffer是因為String只能產生一個靜態類型--它的大小是不能改變的,而StringBuffer能夠產生一個可變長度的字串類型。

  在這裡,drawRect成員函數被重載了,通過使用相同的成員函數名字,你可以用新的成員函數來代替舊的成員函數。不過,那些被說明為final的成員函數是不能被重載的。

  注意,你不必在新的類中包含那些與被繼承類相同的代碼,而只需要加入你想要的東西,但你必須建立一個新的構造成員函數,以區分這兩個不同的類。

  新類的全貌如下所示,你可以發現通過繼承Rectangle類,代碼變得非常簡單明了。

class fillRect extands Rectangle

{

   public fillRect(int w,int h)

  {

      supper(w,h);

      private String makeString(char ch,int num)

      {

         StringBuffer str=new StringBuffer();

         for(int i=num;i>0;i--)

         str.append(ch);

         return str.toString();

      }   

      public void drawRect()

      {

         for(int i=height;i>0;i--)

         System.out.printlm(makeString("#",width));

      }  

  }

}

3:使用介面

  Java可以建立一種稱作介面(interface)的類,在這個類中,所有的成員函數都是抽象的,也就是說它們都只有說明沒有定義,你可以如下所示來說明一個介面。

public interface interfaceName

//成員函數說明

  介面中成員函數的預設參考型別是private,介面(interface)的內部變數是不可更改的,並且總是static和final。

  通過使用關鍵字implement,你可以在定義類時繼承一個介面。不過與extends不同的是,一個類可以同時繼承多個介面。

  使用介面的優點在何處呢?通過建立一個介面,你可以說明一整套抽象的成員函數而無須去具體實現它,所有繼承了這個介面的類,都將有著具有相同原形的成員函數。例如,你想所有的shapes都有一個draw()成員函數,你可以建立一個介面並且用Shape命名:

public interface Shape

void draw();

  現在,無論你何時建立一個繼承自Shape的類,都將擁有一個成員函數draw()。

4:類的轉換

  類的轉換,與不同類型的變數之間的轉換有相似之處,但並不一樣。

  我們可以把一個父類的對象轉換成一個子類對象,下面的代碼說明一個類轉換的例子,其中Y類是從X類繼承而來的:

Y y=new Y();

X x;

x=y;

  需要注意的是兩個子類之間的轉換是不可以的。

5:null,this和supper變數

  所有的類都有三種變數:null、this和supper。

  null變數不指向任何實際對象,而是指向一個Null 物件,如下例所示:

    Rectangle rect=null;

  該例產生一個矩形類的變數,但不建立一個實際的對象。另外,假如一個成員函數需要一個對象作為參數時,你同樣可以用null代替。

  this變數指向對象本身,一個類可以通過this變數來獲得一個代表它自身的物件變數。

  supper變數是一個指向類父類構造成員函數的變數,你可以通過調用它,來迅速完成對子類的構造成員函數的設計。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.