程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 轉-類的深入研究

轉-類的深入研究

編輯:JAVA編程入門知識

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變量不指向任何實際對象,而是指向一個空對象,如下例所示:
  
  Rectangle rect=null;
  
  該例產生一個矩形類的變量,但不創建一個實際的對象。另外,假如一個成員函數需要一個對象作為參數時,你同樣可以用null代替。

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


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved