論程式設計中的父與子

2021-08-27 19:15:15 字數 2285 閱讀 3659

程式語言中的繼承就好比日常生活中的遺傳和模仿。通過遺傳,兒子獲得了父親的某些基因,對外表現出某種特性,通俗的說法就是我們常聽到人們說「張三的眼睛......長得和他父親很像」之類的話;通過模仿,兒子的一些行為、動作、處事方式會和父親很像。我們在程式設計過程中所接觸的繼承實質與這很相似,這裡的「某種特性」就相當於程式設計中的「屬性」,這裡的「一些行為、動作、處事方式」就相當於程式設計中的「成員函式」。照此說來,繼承就是子類繼承了父類的屬性和方法。但在程式語言中繼承還是有別於生活的,遺傳和模仿所獲得的僅僅只是一部分,而繼承則是繼承了父類所有的屬性和方法。話雖如此,但是當子類不能呼叫父類的私有屬性,在例項化子類物件的時候,會開闢一定的儲存空間用來儲存從父類繼承的私有屬性,但這些屬性是無法被呼叫的,所以可以理解為子類不能繼承父類的私有屬性。

當子類中重寫了父類的方法時,例項化乙個子類物件,呼叫的是子類重寫後的方法。

//父類

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 可...