你父類(lèi)的的屬性用的private(私有),這個(gè)是沒(méi)辦法直接繼承使用的,有三種方法修改
10年積累的成都網(wǎng)站建設(shè)、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶(hù)對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶(hù)得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有庫(kù)車(chē)免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
一:你可以把修飾改為public(公有),這樣在子類(lèi)中就可以直接修改,如下:
Digimon:
public class Digimon {
public String mon;
public String name;
}
Patamon:
public class Patamon extends Digimon{
public Patamon(){
mon="Angemon";
}
}
二:給父類(lèi)添加get,set方法,如下:
Digimon:
public class Digimon {
private String mon;
private String name;
public String getMon() {
return mon;
}
public void setMon( String mon ) {
this.mon = mon;
}
public String getName() {
return name;
}
public void setName( String name ) {
this.name = name;
}
Patamon:
public class Patamon extends Digimon{
public Patamon(){
setMon( "Angemon" );
}
}
}
三:給父類(lèi)添加參數(shù)構(gòu)造器(也需要添加get,set不然賦值了你也獲取不到),如下:
Digimon:
public class Digimon {
private String mon;
private String name;
public Digimon() {
super();
}
public Digimon( String mon, String name ) {
super();
this.mon = mon;
this.name = name;
}
public String getMon() {
return mon;
}
public void setMon( String mon ) {
this.mon = mon;
}
public String getName() {
return name;
}
public void setName( String name ) {
this.name = name;
}
}
Patamon:
public class Patamon extends Digimon{
public Patamon(){
//調(diào)用父類(lèi)構(gòu)造器
super( "Angemon", "豆豆" );
}
}
這里考慮覆蓋關(guān)系還要考慮類(lèi)的初始化順序
這里其實(shí)是涉及類(lèi)的初始化。
因?yàn)橛欣^承關(guān)系,所以它在調(diào)用子類(lèi)Atest()構(gòu)造器前,先調(diào)用了父類(lèi)的構(gòu)造器,有個(gè)隱藏的 super();調(diào)用,但因?yàn)閠est()被覆蓋,它會(huì)調(diào)用子類(lèi)的test(),這時(shí)子類(lèi)的成員變量只是定義,還未進(jìn)行初始化賦值,而int型的默認(rèn)初始值為0,如果你把i變成String型,你會(huì)發(fā)現(xiàn)第一次輸出為null
子類(lèi)已經(jīng)覆蓋了父類(lèi),并且重寫(xiě)了父類(lèi)的方法, 一般來(lái)說(shuō), 就沒(méi)有必要用子類(lèi)調(diào)用父類(lèi)中被覆蓋的方法了.(否則就不要覆蓋了啊)
要實(shí)現(xiàn)也是可以的 ,我們 需要為子類(lèi)提供一個(gè)其他的方法,用于去調(diào)用父類(lèi)中被覆蓋的方法
參考代碼
class?A?{//父類(lèi)
public?void?print()?{
System.out.println("父類(lèi)的print方法");
}
}
class?B?extends?A?{//子類(lèi)
@Override
public?void?print()?{
System.out.println("子類(lèi)的print方法");
}
//?在子類(lèi)里創(chuàng)造一個(gè)方法去調(diào)用父類(lèi)的方法
public?void?fuLeiPrint()?{
super.print();?//super指向父類(lèi)
}
}
public?class?Test?{
public?static?void?main(String[]?args)?{
B?b?=?new?B();
b.print();
b.fuLeiPrint();
// A?a?=(A)b;?//?這樣強(qiáng)轉(zhuǎn)還是打印的子類(lèi)的方法,因?yàn)閮?nèi)存中還是子類(lèi)
// a.print();
}
}
一,"如何在子類(lèi)重寫(xiě)(覆蓋)父類(lèi)的方法"
這個(gè)術(shù)語(yǔ)叫“重載”。很簡(jiǎn)單,首先把父類(lèi)方法原封復(fù)制到子類(lèi)里,然后修改函數(shù)體就可以。注意函數(shù)簽名不能變。
二,如何在子類(lèi)方法中調(diào)用父類(lèi)方法的變量值來(lái)用
這是做不到的,不可能在一個(gè)函數(shù)中調(diào)用另一個(gè)函數(shù)的局部變量。父類(lèi)的屬性是有可能用的,因?yàn)樽宇?lèi)會(huì)繼承父類(lèi)的public和protected屬性。