1. 程式人生 > >JAVA中有關繼承的一個例項

JAVA中有關繼承的一個例項

在JAVA中,“extends”用來表示繼承,當建立一個類時,總是在繼承,除非已經明確指出要從其他類中繼承,否則都是隱式從JAVA中的標準根類Object中繼承,下面的一個程式示範了JAVA中的許多特性:

package access;
class Cleanser{
	private String s = "Cleanser";
	public void append(String a){
		s +=a;
	}
	public void dilute(){
		append(" dilute()");
	}
	public void apply(){
		append(" apply()");
	}
	public void scrub(){
		append(" scrub()");
	}
	public String toString(){
		return s;
	}
	public static void main(String[] args){
		Cleanser x = new Cleanser();
		x.dilute();
		x.apply();
		x.scrub();
		System.out.print(x);;
	}
	
}
public class Detergent extends Cleanser{
	public void scrub(){
		append(" Detergent.scrub()");
		super.scrub();
	}
	public void foam(){
		append(" foam()");
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Detergent x = new Detergent();
		x.dilute();
		x.apply();
		x.scrub();
		x.foam();
		System.out.println(x);
		System.out.println("Testing base class:");
		Cleanser.main(args);
	}

}

該程式的執行結果為:


1.在Cleanser的append()方法中,用“+=”操作符將String物件連線起來,此操作符在JAVA設計時被過載用以String型別的連線操作,另一個是“+”。

2.在Cleanser和Detregent中均含有main()方法,可以為每個類都建立一個main()方法,這樣做可以使測試更加方便,每個類的單元測試簡便易行,並且在單元測試完成後,不需要刪除該方法,可以留待下次的測試。
3.一個程式中含有多個類,也只有在命令列所呼叫的那個類的main()方法會被呼叫,因此,如果命令列是java Detregent,那麼Detregent.main()方法會被呼叫。即使Cleanser不是一個public類,如果命令列是java Cleanser,那麼Cleanser.main()也會被呼叫,即使一個類只具有包訪問許可權,其public main()依然可以訪問。

4.Detregent.main()明確呼叫了Cleanser.main(),並將引數傳遞給了它。也可以向其傳遞任何String陣列。

5.Cleanser中的所有方法都應為public,這一點非常重要,為了繼承,一般的規則為:將所有資料成員指定為private,將所有的方法指定為public,而protected藉助匯出類來訪問,特殊情況下根據實際進行微動。原因在於如果不加任何的訪問限制符,那麼預設為包訪問許可權,它僅允許包內成員訪問,而其它包的某個類要繼承時,只能訪問public成員。

6.在Cleanser的介面中有一組方法:append()、dilute()、apply()、scrub()、toString()方法。由於Detregent繼承自Cleanser,那麼Detregent可以在介面中自動獲取這些方法,可以將繼承視作對類的複用。

7.在scrub()中,使用基類定義的方法對其進行修改是可行的,若相要在新版本中呼叫從基類繼承來的方法,但在scrub()中並不能直接呼叫scrub(),因為會產生遞迴效應,所以可以利用surper可以對基類中的scrub()進行呼叫。

8.在繼承中,並不一定非得使用基類的方法,可以在匯出類中新增自己想要的新方法。除了可以呼叫Detregent的方法外還可以呼叫Cleanser中所有可用的方法。