小说妹妹网

手机浏览器扫描二维码访问

第6部分(第1页)

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;”;”中国”);

UniversityWorldu2=newUniversityWorld(”清华大学”;”北?copy;”;”

中国”);System。out。println(”u1=”+u1。name+”;”+u1。city+”;”+

u1。country);System。out。println(”u2=”+u2。name+”;”+u2。city+”;

”+u2。country);System。out。println(”city=”+city+”;country=”+

country);System。out。println(”u1。samecity(u2)=”+u1。samecity(u2));

System。out。println(”u1。samecity(city;country)=”+u1。samecity(city;

country));}}

下面是输出结果。

C:》javaUniversityWorldCityu1=北?copy;大学;北?copy;;中国u2=清华大学;北?copy;;中国city=上海;country=中国u1。samecity(u2)=trueu1。samecity(city;country)=false

5。13动态成员函数发送

当你用点操作符调用一个对象实例的成员函数时,对象实例所属的类在编译时要被检查,以确保调用的成员函数在该类中是存在的。在运行时,对象实例可以指向所声明类型的子类的实例。在这?copy;情况下,如果子类覆盖了要调用的成员函数,Java就用实例来决定调用哪一个成员函数。如下面的例子,两个类是子类和超类的关系,子类覆盖了超类的成员函数。

classA{voidcallme(){System。out。println(”在A的callme成员函数里”);}}

classBextendsA{voidcallme(){System。out。println(”在B的callme成员函数里”);}}

classDispatch{publicstaticvoidmain(Stringargs''){Aa=newB();a。callme();}}

有趣的是,在成员函数main里,我们把变量a声明为类型A,然后把类B的一个实例存放到它上面。我们在a上调用成员函数callme,Java编译器确定在类A确实有成员函数callme,但是在运行时,由于a事实上是B的实例,所以调用B的callme,而不调用A的。下面是运行结果:C:》javaDispatch在B的callme成员函数里

5。14final

在缺省情况下,所有的成员函数和实例变量都可以被覆盖。如果你希望你的变量或成员函数不再被子类覆盖,可以把它们声明为final。这意味着将来的实例都依赖这个定义。例如:finalintFILE_NEW=1;finalintFILE_OPEN=2;finalintFILE_SAVE=3;fianlintFILE_SAVEAS=4;finalintFILE_QUIT=5;final变量用大写标识符是一个一般的约定。

产生物  娘亲V5父皇很欠抽    上古卷轴天际之子  要说多少次,我不是人奸!  魅魔模拟器  众语皆悲  洪荒老祖已无敌  穿越之正妻诱惑 02.25完结+1番外  游神传说之界王  史上最拽的十个女人  黄帝内经实用手册  元宝传奇  鬼夜  道君且慢  闲巫在都市  东北谜踪  天空大陆  荒界实录  节妇的悠然生活  

热门小说推荐
邪王撩妻:嫡妃真难追

邪王撩妻:嫡妃真难追

一朝穿越,竟然上了一个花痴女的身,留下一堆烂摊子,还等着高大上的她来收拾,江未央表示有些醉醉哒。大婚之日,被夫君各种刁难,她游刃有余,轻松化解,呵呵,还把她当成废柴花痴女,那就大错特错了!等到她反攻之日,风君璃你给我等着!娘子你累吗,为夫给你揉揉肩。娘子你饿吗,来为夫喂你吃点桂花糕。娘子,你喜欢为夫做什么闭嘴,本王妃喜欢你离远一点!...

我和名模的荒岛生涯

我和名模的荒岛生涯

沦落荒岛,一场惊变之后,我沦为棋子,受人奴役摆布。卧薪尝胆,觉醒武影,不羁放纵,放肆桀骜,铮铮铁骨岂能弯。金麟岂是池中物,一遇风云便化龙。进入广袤神域后,为了保护我的女人们,双拳怒战八荒,噬天剑刺六合,当臣服之人越来越多,我却发现,神域背后还隐藏着极大的秘密,竟是与我的身世相关关爱作者群553985685加更条件200钻石加一更★500推荐票加一更★一个玉佩加一更★一个皇冠加十更(分期加更)★关爱作者,从你做起,嘿嘿...

降妖伏魔

降妖伏魔

鬼魅横行的世界宗教信仰没落的年代,法师已经成为了不为人知的异类,是神棍,还是真有其事?延续林正英道长系列之降妖伏魔。...

终焉的骑士

终焉的骑士

他曾经以一人之力改变了整个大陆为它带去了死亡,毁灭与混乱他掌握这这个世界上最强大而令人恐惧的力量使那令人畏惧的名字传遍四方死亡不是结束,而是另外一个开始当玫瑰与剑的旗帜再次飘扬在这天空之下时所带来的...

午夜外卖员

午夜外卖员

我是一名午夜外卖员,专为鬼怪送外卖。刚外出打工的我,意外找到了一份高薪工作,就这样,我每天午夜时分出发,然而恐怖怪异的事情开始一件接一件的发生。最重要的是,我发现我家竟然守着一笔巨大的财富,那是一座鬼墓...

每日热搜小说推荐