第6部分(第1/6 页)
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