1. 程式人生 > >java多型的原理:靜態分派和動態分派

java多型的原理:靜態分派和動態分派

1.靜態分派

所有依賴靜態型別來定位方法執行版本的分派動作(Parent p=new Son();左邊的Parent就是變數的靜態型別,或者外觀型別)。靜態分派發生在編譯階段,重寫(overload)是典型例子。編譯器在編譯期並不知道物件的實際型別,實際型別只有在執行期才知道。當方法的輸入引數是字面量的時候,你有多個版本的過載方法,編譯期可以確定的方法不是唯一的,例如你的輸入引數為‘x’,如果過載方法中有一個是以char型別為引數,編譯期確定呼叫此方法,如果沒有char型別引數的方法,字面量'x'在傳入方法的時候會發生自動型別轉換或者自動裝箱,以此來確定該呼叫哪一個過載方法。

2.動態分派

執行期間根據實際型別確定方法執行版本的分派過程稱為動態分派。確定方法的時候根據呼叫方法的物件的實際型別選擇要呼叫的方法。

相關推薦

java原理靜態分派動態分派

1.靜態分派所有依賴靜態型別來定位方法執行版本的分派動作(Parent p=new Son();左邊的Parent就是變數的靜態型別,或者外觀型別)。靜態分派發生在編譯階段,重寫(overload)是典型例子。編譯器在編譯期並不知道物件的實際型別,實際型別只有在執行期才知道。

Java線程synchronized關鍵字Lock

final sleep java多線 大型 pre 有一個 但是 logs 讀寫文件 一、synchronized   synchronized關鍵字可以用於聲明方法,也可以用來聲明代碼塊,下面分別看一下具體的場景(摘抄自《大型網站系統與Java中間件實踐》) 案例一:

(三十)分派調用靜態分派動態分派

技術 args 不同 什麽 AI over src println override 分派調用 其實分派分為兩種,即動態分派和靜態分派。我們在了解分派的時候,通常把它們與重寫和重載結合到一起。 重載(overload)與靜態分派 我們先看一個題: public clas

java執行緒1程序執行緒

多執行緒樣例 我們用工人卸貨舉例:有一集裝箱的貨物等待卸車,共100個箱子,一個工人一次只能搬一個箱子。 如果只有一個工人,那麼該工人需要搬運100次,而且是不停歇的搬運。 如果有5個或者10個工人,那麼平均每個工人只需要搬運20或者10次就可以了。 甚至有1

Java中的向上轉型向下轉型

向上轉型:將一個父類的引用指向一個子類物件,稱為向上轉型,自動進行型別轉換     用法: Father f = new Son(); 向下轉型:子類引用指向父類引用的子類物件  通俗的說就是子類例項物件賦值給父類引用,然後父類引用又要賦值給子類引用,這個過程就是向下轉型

Python基礎筆記_Day11_Python單繼承、繼承、重寫方法、Python、Python靜態方法類方法

Day11_Python單繼承、多繼承、重寫方法、Python多型、Python靜態方法和類方法 11.01_Python語言基礎(繼承的介紹)(掌握) 11.02_Python語言基礎(單繼承)(掌握) 11.03_Python語言基礎(多繼承)(掌握) 11.04_Python語言基

java學習之代理(2)靜態代理動態代理

一,代理的概念 代理是一個物件,代理物件為其他物件提供一種代理,以控制對這個物件的訪問,代理物件起到中介作用,可以去掉或者增加額外的服務。 如:火車票代售點就是火車站售票處的一個代理物件,可通過訪問代售點進行業務處理。 二,靜態代理的2種實現方式:繼承和聚合 靜態代理中的代

Java中的靜態分派動態分派

Java中的分派 首先需要理解一下靜態型別和動態型別。找了很多資料,沒有在java的書中找到關於這兩種型別的具體定義,但是在C++的書中找到了下面的定義,這可能就是java被稱為是 C++- 的原因之一吧。:) 靜態型別與動態型別 靜態型別:不需

深入理解JAVA原理

  之前一直知道多型是什麼東西,平時敲程式碼也經常用到多型,但一直沒有真正瞭解多型底層的執行機制到底是怎麼樣的,這兩天才研究明白點,特地寫下來,跟各位同學一起進步,同時也希望各位大神指導和指正。   多型的概念:同一操作作用於不同物件,可以有不同的解釋,有不同的執行結果,這就是多型,簡單來說就是:父類的引用

JAVA靜態分派動態分派

靜態分派 : 以下是靜態分派的測試程式碼 public class StaticDispatch { static abstract class Human{} static class Man extends Human{} sta

Java之前期靜態繫結與後期動態繫結

多型是面向物件中一個非常重要的功能,因為多型物件在執行的時候才知道真正型別是什麼。在java中對方法的呼叫分為靜態繫結和動態繫結兩個功能。 靜態繫結 靜態繫結的意思是在編譯的時候就確定

java中的代理(靜態代理動態代理)

之前本人在設計模式中有寫過靜態代理和動態代理的相關程式碼測試,可以看下。 今天我們主要學一下理論相關知識。 AOP的原理就是動態代理機制。RPC框架也是實現了AOP機制。 靜態代理 靜態代理:在程式碼編譯時就確定了被代理的類是哪一個。 這個靜態代理比較簡單,代理類和被代

VC中使用動態連結庫DLL靜態呼叫動態呼叫

VC中生成DLL的辦法見:www.codeproject.com/KB/DLL/RegDLL.aspx VC中使用DLLhttp://www.cnblogs.com/c1230v/articles/1401448.html 呼叫DLL有兩種方法:靜態呼叫和動態呼叫. (一

Mybaits 原始碼解析 (十一)----- 設計模式精妙使用靜態代理動態代理結合使用@MapperScan將Mapper介面生成代理注入到Spring

上一篇文章我們講了SqlSessionFactoryBean,通過這個FactoryBean建立SqlSessionFactory並註冊進Spring容器,這篇文章我們就講剩下的部分,通過MapperScannerConfigurer將Mapper介面生成代理注入到Spring 掃描Mapper介面 我們上一

【深入Java虛擬機器(5)】性實現機制—靜態分派動態分派

方法解析 Class檔案的編譯過程中不包含傳統編譯中的連線步驟,一切方法呼叫在Class檔案裡面儲存的都只是符號引用,而不是方法在實際執行時記憶體佈局中的入口地址。這個特性給Java帶來了更強大的動態擴充套件能力,使得可以在類執行期間才能確定某些目標方法的直接引

Java基礎知識類,,Object,陣列字串

類 類的定義格式: [類的修飾符] class 類的名稱 [extends 父類名稱][implements 介面名稱列表] { 變數的定義以及變數的初始化; 方法的定義以及方法體; } 類的修飾符:public,abstract ,final等。 private

Java中的靜態分派動態分派

    解析呼叫一定是個靜態過程,在編譯期間就完全確定,在類載入的解析階段就會把涉及的符號引用轉化為可確定的直接引用,不會延遲到執行期再去完成。而分派呼叫則可能是靜態的也可能是動態的,根據分派依據的宗量數(方法的呼叫者和方法的引數統稱為方法的宗量)又可分為單分派和多分派。兩類分派方式兩兩組合便構成了靜態單分派

C++java的區別

C++和java多型的區別 C++中,如果父類中的函式前邊標有virtual,才顯現出多型。 如果父類func是virtual的,則 Super *p =new Sub(); p->func(); // 呼叫子類的func 如果不是virtual的,p->func將呼

Java執行緒-44-靜態靜態方法同步鎖物件是什麼

前面一篇,我們知道了synchronized關鍵字擴起來範圍的程式碼塊就可以實現同步,其實,在Java中,只需要在方法上加上synchronized關鍵字即可,就像加上static一樣。本篇來看看加上synchronized關鍵字修飾的非靜態和靜態方法的同步鎖物件是什麼。 1.非靜態同步鎖物