国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

java學(xué)習(xí)筆記7--Polymorphism

2019-11-18 14:38:55
字體:
供稿:網(wǎng)友

  Polymorphism
多態(tài)(polymorphism)也被稱為動態(tài)綁定『dynamic binding』、后綁定『late binding』或運行時綁定『run-time bingding』。
它的意思是要在程序運行的時候,根據(jù)對象的類型來決定該綁定哪個方法。多態(tài)性是繼數(shù)據(jù)抽象和繼續(xù)之后的,面向?qū)ο蟮木幊陶Z言的第三個基本特性。

綁定(binding): 將方法的調(diào)用連到方法本身
前綁定(early binding): 當綁定發(fā)生在程序運行之前時(就是由編譯器或連接器負責(zé))
后綁定(late binding): 在程序運行的時候,根據(jù)對象的類型來決定該綁定哪個方法。

“封裝”(encapsulation)通過將數(shù)據(jù)的特征(characteristics)與行為(behavior)結(jié)合在一起,創(chuàng)建了一種新的數(shù)據(jù)類型。
“隱藏實現(xiàn)”(Implementation hiding)通過將細節(jié)設(shè)成PRivate,完成了接口與實現(xiàn)的分離。
“多態(tài)性”是站在“class”的角度來處理這種邏輯上的分離的。


--------------------------------------------------------------------------------



Shape s = new Circle(); //upcasting: 將Circle對象upcast為Shape類型
s.draw();

Upcast(上傳)就是把對象的reference 當作基類的reference 來用.(注:java內(nèi)部是知道對象屬于什么類型的)
因為Derived class is a type of base class, 所以基類的reference (Shape s)能接受派生類(circle)的對象

upcast以后,基類reference 調(diào)用的都是基類自己的method (late binding),
除非這個method是late-bound的,也就是派生類覆寫(override)了這個method, 才會根據(jù)對象類型選擇相應(yīng)的method(多態(tài)性).

以上面的代碼為例:s是Shape類型的reference, 除非draw()是一個動態(tài)綁定的method(派生類circle覆寫了這個draw()),
s.draw()才會調(diào)用cicle的draw(), 否則調(diào)用的都是基類Shape自己的method

private和final的method都會采用early-binding, 因為他們是不能被override的。(注:private 方法自動就是final 的)

建議別用基類的private method的名字去命名派生類的method。因為這樣會讓人誤以為會override這個method,
實際上private自動就是final的,不能被override。


--------------------------------------------------------------------------------

override(覆寫) 表示在派生類里寫一個"同樣"的method。 就是重新寫一遍這個method
(注:1."同樣"表示:同名且參數(shù)列表和返回值也相同。 2.method必須是非final, 非private的(private 方法自動就是final 的) )
overload:除了"同樣"的method(即override) 以外的同名method.


--------------------------------------------------------------------------------


當你想要通過一個公共的接口來操控一組類的時候,就可以使用抽象類了。通過動態(tài)綁定機制,那些符合方法特征的派生類方法將會得到調(diào)用。
abstract class {}
抽象類的方法可以使abstract的,也可以是非abstract。派生類繼續(xù)了一個abstract類,那他要么實現(xiàn)所有的abstract的method,要么把自己也變成abstract的。


--------------------------------------------------------------------------------



//: c07:PolyConstrUCtors.java
// Constructors and polymorphism
// don't produce what you might eXPect.
import com.bruceeckel.simpletest.*;
abstract class Glyph {
abstract void draw();
Glyph() {
System.out.println("Glyph() before draw()");
draw();//假如你new一個派生類對象,并且在基類構(gòu)造函數(shù)里面調(diào)用了動態(tài)綁定的方法,
//那么它會使用那個派生類覆寫后的版本。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 福州市| 开封县| 视频| 方城县| 江川县| 德庆县| 阿尔山市| 申扎县| 容城县| 扬州市| 和政县| 和田县| 建水县| 吴川市| 建阳市| 大连市| 西乡县| 隆德县| 南阳市| 青海省| 宁陵县| 浏阳市| 石渠县| 霸州市| 宁南县| 嘉鱼县| 越西县| 彭州市| 民权县| 盘锦市| 浙江省| 沙雅县| 和平县| 武义县| 绥化市| 遵义市| 麦盖提县| 辽源市| 衡山县| 宣威市| 崇义县|