複用代碼(代碼重用機制)
java問題解決是圍繞著類展開的. 可以通過建立新類來複用代碼(利用現有類形成新類). 有兩種方法可以達到這一目的:
(1)在新類中產生現有類的對象. 由於新類是由現有類的對象所組成, 所以這種方法稱為組合. 該方法只是複用了現有程式碼的功能, 而非它的形式.
(2)按照現有類的形式來建立新類. 採用現有類的形式並在其中添加新代碼. 稱為繼承.
/** *//**
* Title: Composition for code reuse<br>
* Description: 組合文法, 只需將對象引用置於新類中即可<br>
* Copyright: (c) 2008 Thinking in Java<br>
* Company: (c) 2008 Augmentum.Inc<br>
* @author Forest He
* @version 1.0
*/
class WaterSource ...{
private String s;
WaterSource() ...{
System.out.println("WaterSource()");
s = new String("Constructed");
/**//*建立了兩個對象, 一個是"Constructed", 一個是指向"Constructed"的引用對象s*/
}
public String toString() ...{return s;}
}
public class SprinklerSystem ...{
private String value1, value2, value3, value4;
private String
s1 = new String("aaaaaaaaaaa"),
s2 = new String("bbbbbbbbbbb"),
s3, s4;
/**//*學會上訴批量定義方法*/
private WaterSource source = new WaterSource();
private int i;
private float f;
public String toString() ...{
if(s3 == null) s3 = new String("ccccccccccc");
if(s4 == null) s4 = new String("ccccccccccc");
return
"value1 = " + value1 + " " +
"value2 = " + value2 + " " +
"value3 = " + value3 + " " +
"value4 = " + value4 + " " +
"s1 = " + s1 + " " +
"s2 = " + s2 + " " +
"s3 = " + s3 + " " +
"s4 = " + s4 + " " +
"i = " + i + " " +
"f = " + f + " " +
"source = " + source;
/**//*這個return語句真的很別緻, 學習*/
}
public static void main(String[] args) ...{
SprinklerSystem sprinklers = new SprinklerSystem();
System.out.println(sprinklers);
}
}
/**//* toString(): 每一個非基本類型的對象都有一個toString()方法, 而且當編譯器需要一個String而你卻只有一個對象時, 給方法會被調用.
* SprinklerSystem.toString()中"source = " + source;指的是: 由於只能將一個String對象和另一個String對象相加, 因此編譯器會告訴你: "我將調用toString(), 把source轉換成一個String!"(自動類型轉換). 每當你想要使所建立的類具備這樣的行為時, 編寫一個toString()方法覆蓋掉預設toString()方法即可.
*/
編譯器並不是簡單的為每一個引用都建立預設對象, 這一點是很有意義的. 否則記憶體負擔會很重. 可以在代碼的下列位置初始化這些引用:
(1)在定義對象的地方. 這意味著它們總是能夠在構造器被調用之前被初始化.
(2)在類的構造器中.
(3)在正要使用這些對象之前, 這種方式稱為"惰性初始化". 在產生對象不值得及不必每次都產生對象的情況下, 這種方式可以減少額外的負擔.