多型的概念:多型其實是同乙個物件在不同時刻體現出來的不同狀態
多型分為三種:
本文講解為具體類多型,也是基礎。
多型的前提:
1、有繼承或者實現關係。
2、有方法重寫(因為多型就是靠方法重寫來體現不同狀態的)。
3、要有父類或者父介面引用指向子類物件。
格式:父 f = new 子()
多型中的成員訪問特點:
1、成員變數
編譯看左邊(父類),執行看左邊(子類)。
2、構造方法
建立子類物件的時候,訪問父類的構造方法,對父類的資料進行初始化
3、成員方法
編譯看左邊(父類),執行看右邊(子類)
(因為成員方法存在方法重寫,所以成員方法訪問的時候訪問的是子類)。
4、靜態方法
編譯看左邊(父類),執行看左邊(子類)
(靜態和類相關,算不上重寫,所以,訪問還是左邊)
多型的好處:
1、提高了**的維護性(由繼承來保證)
2、提高了**的擴充套件性(由多型來保證)
對於下面的**,是沒有用多型來寫的,如果建立乙個新的子類,就要在工具類中多增加乙個方法,如果建立很多個,那麼同樣的**要重複好多遍,如果用多型,就可以保證在多增加乙個類的同時,工具類中不用再增加乙個方法。這就提高了**的擴充套件性。
**1:
public
class
main
}//建立工具類
class
animaltool
//呼叫貓的功能
public
static
void usecat(cat c)
//呼叫狗的功能
public
static
void usedog(dog d)
//如果我建立乙個新的子類,就要在這裡多增加乙個方法,如果建立很多個,那麼同樣的**要重複好多遍
}//建立父類
class
animal
public
void sleep()
}//建立子類
class
catextends
animal
public
void sleep()
}//建立子類
class
dogextends
animal
public
void sleep()
}
如果用多型,就會節省很多**。因為只需要修改animaltool類,所以只給出了animaltool修改後的**。
**2:
class animaltool
//運用多型就能很好的解決**重複的問題
public
static
void
useanimal(animal a)
}
多型的弊端:不能使用子類的特有功能。
如果想要解決就涉及到物件的轉型問題
向上轉型:fu f = new zi();例如下面的**:向下轉型:zi z = (zi)f; //要求f必須是能夠轉換為zi類的
public
class
main
}class
animal
}class
dogextends
animal
public
void lookdoor()
}class
catextends
animal
public
void playgame()
}
圍棋程式三步走
用什麼語言及用win還是linux無所謂。第一步 介面。要求不高,能交替著子,能自動提子 規則 能判定勝負,能記譜 不難,很多人已完成,而且能完成得不錯 不過完美的程式要充分打磨 難度係數計為2 第二步 使程式下完一局棋 用一種或幾種演算法 當然不是完全的隨機演算法 使程式能完成一局棋。其過程中能基...
ExtJs閉包三步走
構造閉包的一般步驟 1 在函式a內部定義乙個函式b 2 通過呼叫a把b的引用返回出來,賦值給其他作用域中的乙個變數c 3 通過c執行b 通過一段 來展示閉包的模版 function a return b var c a c 例 使用閉包模擬私有屬性 var person function getna...
0720 做產品,三步走
好像,事情也沒那麼複雜 發現需求做出產品以滿足需求告知需要的人 發現需求,首先要豐富自己的生活,提高自己的品位。這樣,才能發現生活中不如意的地方,也就是要改進的點。多和不同的人接觸,洞察別人的需求,也是很重要的。有了需求,就得有能力把產品做出來。落實到具體,主要是產品設計和開發。有了好產品,還得讓別...