程式語言中的繼承就好比日常生活中的遺傳和模仿。通過遺傳,兒子獲得了父親的某些基因,對外表現出某種特性,通俗的說法就是我們常聽到人們說「張三的眼睛......長得和他父親很像」之類的話;通過模仿,兒子的一些行為、動作、處事方式會和父親很像。我們在程式設計過程中所接觸的繼承實質與這很相似,這裡的「某種特性」就相當於程式設計中的「屬性」,這裡的「一些行為、動作、處事方式」就相當於程式設計中的「成員函式」。照此說來,繼承就是子類繼承了父類的屬性和方法。但在程式語言中繼承還是有別於生活的,遺傳和模仿所獲得的僅僅只是一部分,而繼承則是繼承了父類所有的屬性和方法。話雖如此,但是當子類不能呼叫父類的私有屬性,在例項化子類物件的時候,會開闢一定的儲存空間用來儲存從父類繼承的私有屬性,但這些屬性是無法被呼叫的,所以可以理解為子類不能繼承父類的私有屬性。
當子類中重寫了父類的方法時,例項化乙個子類物件,呼叫的是子類重寫後的方法。
//父類
public class people
public string getname()
public void setname(string name)
}//子類
public class child extends people
}//測試類
public class test
}public class child extends people
}
則會報錯如下:
意思是父類沒有定義無參構造器
解決辦法有兩種:
1.在父類中把預設的無參構造器顯示化的寫出來,即
public people(){
2.在子類中把無參構造器重寫一下,在該構造器內呼叫父類有參的構造器,即
public child(){
super(「張三」);
自動轉型:
可以將子類自動轉成父類,即將子類看作是父類,但是我們不能將父類看作是子類。
格式:父類類名 物件名=new 子類類名();
形象點來說,在一堆小轎車中隨機找出一輛,它既是小轎車,同時又是車。在生活中,我們可以把小轎車看作是車,但車卻不一定都是小轎車,還會有其他型別的車,例如:客車、貨車......
public class people
public void action()
public string getname()
public void setname(string name) }
public class adult extends people
public void rest()
public string getname()
public void setname(string name) }
public class test
}
當在test類的主函式中執行 adult.play(); [子類重寫了父類的方法] 時,結果如下:
張三的行動
當執行:adult.action(); [父類特有的方法] 時,結果如下:
null在行動
當測試類是這樣寫時:
public class test
}
結果如下:
null正在行動
null的行動
當執行:adult.rest();時,會出現下面的報錯
錯誤顯示的是rest()方法在父類中沒有定義,由此可知自動轉型產生的物件不能呼叫子類中所特有的方法。
上面這些測試,結果表明:自動轉型產生的物件不能夠呼叫子類所特有的方法;當子類重新定義了自己的屬性並重寫父類的方法時,自動轉型產生的物件呼叫的是子類所重寫的方法。
其實還有一種比較常用的自動轉型,比較隱蔽,容易忽視
在建立介面時,向窗體上新增各種元件的add(comb)方法原**為
public component add(component comp)
它的形參是component型別的,但是add方法它卻可以新增jbutton、jcheckbox、jcombobox等型別的物件,其實jbutton、jcheckbox、jcombobox都是component的子類,這裡就是把子類自動轉型成父類了。
此外,在寫陣列佇列的新增物件功能時,形參是object型別的,這裡也應用到了自動轉型,object是所有類的父類。
OSG中的父節點與子節點
osg中的父節點與子節點 osg主要包含3大基本類節點,即node geode group。osg中其他的大部分節點都繼承自group節點,少部分繼承自node節點及geode節點,但geode和group均繼承自node節點。geode葉節點,可以包含幾何體資訊。可以用它來繪製圖形,在應用程式中,...
物件導向程式設計(3) 子父類與繼承
因為物件導向,所以物件是很重要的儲存工具。和面向過程一樣,它也有變數名重複的風險,比如之前提到的原型汙染。為了一定程度上解決這個問題,引入了子父類和繼承的概念。1.子父類 父類 const getobj function getobj.prototype.getb function 另乙個類 con...
python 父與子程式設計之旅 11巢狀與可變迴圈
for multiplier in range 5,8 for i in range 2,11 print i,x multiplier,i multiplier 可變迴圈 numstars int input 請輸入你希望的星 for i in range 1,numstars 1 print 可...