ersity中繼承的。Java允許在UniversityWorld中宣告變數name和city,但這會隱藏University中的name和city,是與使用子類的目的相矛盾的,應當避免。在UniversityWorld的例項中name、city和country的地位是一樣的。
5。11super在UniversityWorld的例子裡,有一段程式碼和它的超類University的重複,這段程式碼是初始化name和city的,this。name=name;this。city=city;就象在University例子中用this指向第一個建構函式一樣,在Java裡有另一個變數叫做super,它直接指向超類的建構函式。下面這個例子用super來初始化變數name和city,然後列印出這個物件的內容。
classUniversityWorldextendsUniversity{Stringcountry;UniversityWorld(Stringname;Stringcity;Stringcountry){super(name;city);//呼叫了建構函式University(name;city)this。country=country;}publicstaticvoidmain(Stringargs''){UniversityWorldu=newUniversityWorld(”北?copy;大學”;”北?copy;”;”中國”);System。out。println(”大學:”+u。name+”城市:”+u。city+”國家:”+u。country);}}
下面是執行結果。C:》javaUniversityWorld大學:北?copy;大學城市:北?copy;國
家:中國
5。12成員函式的覆蓋
這個University的新的子類繼承了它的超類的成員函式samecity。但這個成員函式samecity判斷的是兩個城市的名字,這是不夠的,因為有可能兩個兩個名字一樣的城市屬於不同的國家,我們要用同時判斷城市和國家的成員函式來覆蓋它。下面就是實現覆蓋的例子。
classUniversity{Stringname;city;University(Stringname;Stringcity)
{this。name=name;this。city=city;}booleansamecity(Stringcity){if
(city。equals(this。city))returntrue;elsereturnfalse;}boolean
samecity(Universityu){returnsamecity(u。city);}}
classUniversityWorldextendsUniversity{Stringcountry;
UniversityWorld(Stringname;Stringcity;Stringcountry){super(name;
city);this。country=country;}booleansamecity(Stringcity;String
country){if(city。equals(u。city)&&country。equals(u。country))return
true;elsereturnfalse;}booleansamecity(UniversityWorldother)
{returndistance(other。city;other。country);}}
classUniversityWorldCity{publicstaticvoidmain(Stringargs'')
{Stringcity=”上海”;Stringcountry=”中國”;UniversityWorldu1=
newUniversityWorld(”北?copy;大學”;”北?copy;”;”中國”);
UniversityWorl