方法的重载.覆盖和隐藏,以及多态的区别
jaa方法的v载重、盖覆隐藏和
载 重overoaldnig
家大都悉熟ajv的a载重以及实,在一现个类中一个函同以数多种不同的形出态现,即数函的数个参数者或类不型一样。例子 Sys
tm.oetu.printn(); 下l面称SOP简
OS(SPtirn stg)r
OSPin(t nmubre)
SO(Phacr ch)
SO(dPoblu neu)
m.................................
这就是重载效的 果
盖覆重(写 )oerwvrtitngi
盖也覆是家熟悉不过大了的,子类承继类父,然子后类覆中原父盖类方法,的从而例实子化后,类用调的子类的是法方。
子例
upbiclc asslfa thre{
ublipc oervwritting(){S
OP("afhter etmhd");o
}
pbulic caslsso n xteensd fthae{r
pubicl vorerwttini(g{)
SPO"(sn omethd")o;
}
pbliuc stticavoi dmani(tSring args[]){
atfehr so=nen swno)(;
osn.verorwiting();t}
}结
果调会用类子的voewrirttngi方,法s o mnteohd。这就覆盖。是
隐
藏 hdei
大知家了覆盖,那道么么什况下,情类实例化后子会用父调的类法方而是不类的方子法?
呢(当然子和类类父方的法定义要是一需样的)
大知家道satitc 型类方法是不能的覆盖被,的所以aja利v这一个特用性成完了藏隐效的。果
子例pu
bil clacs fsthera
p{ublci tasic ovtrweirting(){t
SP("Oafhet metrohd";)}
uplicbc lss soan xetednsfa the{r
uplbics atitc overritwitg(n){
SOP"s(n omthedo)"
};
pbuilc tastc ivid maio(Stnrig argsn]){[
fathr seon=enw on(s);
so.novrwrettiin();g
}}
结
果调用会父的类oevrwittirng法方f thaert ethodm。这就隐是。藏
━━━━━━━━━━━━━━━━━━━━
━方法的重写重、及载藏隐
首先重,和写隐藏发生在两个类中是,而的重可载以发在一个类生中。
重写的概念就是名思义顾了重:新一遍;方写法、参数及名返值是一回模样一的可,实现能的过程一不,为样么什重要写因?为来原方法不的pe够rfcte或 者不str够ng,或者达o到开发者的实际应不用要求
。重
是当载多方法个享相同的有字,名是这但些方法的数参同,或不是者参数的个不同,或数者参数类型不是同时。叫方法的就载重要注
意的是:返回型类不能来区分重用的载法,方仅仅返回型不类同两个的名方法是同error,这点个比较容理易了解:果如你参写数一模一的但样返是类型不一回样的方,法调当的时候,用译编器法没定调哪决好个
隐藏
如,下华为是一道面试题
的
ubpli c c alss classA{
pulibc v od i emtodhOn(inte i {) }
pulbc i v od i m ehtoTdowi(tn i ) { }
pu lbi c sttica v oid me hodThtre(inet i){ }
ublpic s ttai c vod i m ehtoFduo(ritn ){ i }
}
publci lacs s class B ex ends t c alsAs{
pubicl s tati c v oi d m ethdoOenint( i){ }
publc i v ido methoTwo(indt i){
p}bliu c vo i d mehtdoTrhee(itn ){ i }
ublpic st aict v od i metohdFuori(t n i { })
}
1
问些那方隐藏了法类父方的?法 2
那些问方法盖了覆类的方法父 ?
其
实于隐藏关的概本念人不了解,太因为基本用过没但是,上题的中写重是很显明,的那就是mtehoTowdm,tehdoneOm和etodhThre就比e明显较是的错误个了子类继,父承,两类个同相方法的一是st个aitc的一个,不,是你让编译器么实怎化例啊那,下剩的是就隐藏,了据网根搜上的到概念:tsaict类 型的方法是能被覆不的盖也;就说是类的子methdoouF写了也r用,还是调用父类没m的teodFohu方r法
aSplem:p
blicu cass flthae{r
uplbi statcci ovi ovderritwint(g{)
Syste.omt.purin("fathetr etmhod);
"
}}
publi clascsso n etxnde safhert{
upbli csatticvoid o erwrvttiin(){gSystem
out.pri.t(nso"nmetho d";)
}p
ulibcsta tc ivodim ia(Stringna rgs]){[f
ahtreson n=e son();w
so.ovnewritting();r
}
}以
上序程运的行果结是输出就:f了aterh metodh
━━━━━━━━━━━━━━━━━━━━━
重载,继承,
重和写多态的别:区
htt
://wwwpo.ijo.nte/lbgo/ues2/2r3087/arhcive/s200/1517656.hstml
重载继承,,重写和多态的区别:
继承子类是得获类父成的,员重写继承后是新重实现类父的法。方载重在是个一里类一列参数系同不名字相的方同。法态多是为了则免在避父里大量重类载引代起码肿且臃难于维。
网上护到一看有趣个的说法是继承是子:类用使父的类法,而方态多是父则类使用子的类法方。
下面的子包例了含四种实这现:
lcsa sTriaglen xtendes hapeS {
uplbicint getiSdes( )
{eturr n;3
}}
lass Rcetacgnel exetnd Shapes
p{ulbi icnt etSgids(ient i )
{rteur i;n
}
}
pbliuccl ss ahSape {
pulib boolecnai Sshrpa()
re{utrnt ue;r}
pulbi icntget iSes(){
derutr n 0
;}pu
bil cnti geStdie(Tsranile grit)
re{turn3 ;}
upbil cnit gteidSs(eRetancgle ecr{
r)tuer n ;
}
4ubpilcs attcivoid m an(Sitinr[]g rgas){
Tr ingae tlri =ne Twiarnge();lSys
et.muot.pinrln(t"Trangiel isa yte pof sahr? p " +rti.sSiarh())p
;hape sShpae= enwT riaglen();
Sytsm.oet.prinultn("yM shape ah "s +hapes.geStdesi) ( "+ idess.)";
}}
色是重红,载绿色重是写,色蓝继是,承红粉多是态
注意riaTnle类g方的是法写,而重Rctangel类的方法是e载。
重比较色的红粉红的和分部可以发就现态多重载的对点:优果如重载用则,在类里要对应父一每子类都重个载一个得边数的方取法如果用;态多
,则类只提供取得父边数接口,至于取的哪得个形的边数,怎样状取,得在子类里各实自现重写(。)