java多態和泛型_Java面向對象(二) 接口、多態和泛型

一、接口

二、多態

多態是同一個行為具有多個不同表現形式或形態的能力。

2.1 類型轉換

轉換方式

隱式 向上轉型

對于基本數據類型,存儲容量低的可自動向存儲容量高的類型轉換

對于引用變量,子類可被轉換為超類,可被賦給所屬類實現的接口的引用

顯式 向下轉型必須強制類型轉換,是顯示的 場合:賦值轉換 方法調用轉換 算術表達式轉換 字符串轉換

規則

基本類型的轉換

將值從一種類型轉換成另一種類型

引用變量的類型轉換

將引用轉換為另一種類型的引用,不改變對象本身的類型

轉換方式

向上轉型

轉換為任何一個(直接或間接)超類的類型

轉換為對象所屬的類(或其超類)實現的一個接口

向下轉型(唯一情況)

被轉為引用指向的對象的類型

向上轉型(當一個引用被轉為其超類的引用)后,通過它能夠訪問的只有在超類中聲明過的方法。

2.2 方法調用綁定

多態存在的三個必要條件:

繼承/接口實現

重寫/接口方法實現

父類引用指向子類對象/接口類型的引用指向了一個實現此接口的對象,即向上轉型

簡而言之,向上轉型、繼承、重寫是三大前提條件

將一個方法調用同一個方法主體關聯起來被稱作綁定。若程序執行前進行綁定(如果有的話,由編譯器和連接程序實現),叫做前期綁定。在運行時根據對象的類型進行綁定,叫做后期綁定或動態綁定。

在動態綁定中,對象中包含類的信息,編譯器一直不知道對象的類型,但是方法調用機制能找到正確的方法體,并加以調用。

Java中的多態是通過方法的動態綁定機制實現的

只有普通方法調用可以是多態的,成員變量和靜態方法都沒有多態,直接訪問某個域(成員變量),這個訪問將在編譯期進行解析,任何域訪問操作都由編譯器解析。

因此將屬性設為private,不可直接訪問屬性,這里帶來了一個好處,就是可以避免誤以為父類引用能多態的使用子類的屬性。

三、泛型

接口泛型

方法泛型

類泛型

泛型中的通配符

泛型中的限制

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541408.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541408.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541408.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java ArrayList contains()方法及示例

ArrayList類contains()方法 (ArrayList Class contains() method) contains() method is available in java.util package. contains()方法在java.util包中可用。 contains() method is used to check whether this Arraylist contains the given object or not. contains()方法…

BlockingQueue詳解

前言: 在新增的Concurrent包中,BlockingQueue很好的解決了多線程中,如何高效安全“傳輸”數據的問題。通過這些高效并且線程安全的隊列類,為我們快速搭建高質量的多線程程序帶來極大的便利。本文詳細介紹了BlockingQueue家庭中的所…

java isempty_Java ArrayDeque isEmpty()方法與示例

java isemptyArrayDeque類isEmpty()方法 (ArrayDeque Class isEmpty() method) isEmpty() Method is available in java.lang package. isEmpty()方法在java.lang包中可用。 isEmpty() Method is used to check whether this deque is "empty" or "non-empty&qu…

[QGLViewer]3D場景鼠標點擊位置

重載鼠標事件: void AxMapControl::mousePressEvent(QMouseEvent* e) {switch(currentTool){case AX_DRAW_DIRECTION:{if (e->button() Qt::LeftButton) {QPoint screenPte->pos();qglviewer::Vec orig1, dir1;camera()->convertClickToLine(screenPt, or…

elispce導入java項目_emacs的java編程環境設置(jdee,lib,cedet,ecb

1:下載jdee,lib,ecb。(已安裝cedet就不用再安了)2:解壓縮放入load-path目錄。然后load,require。(add-to-list load-path "~/.emacs.d/lisp/jdee-2.4.0.1/lisp")(add-to-list load-path "~/.emacs.d/lisp/elib-1.0")(add…

element 項目 示例_Java ArrayDeque element()方法與示例

element 項目 示例ArrayDeque類element()方法 (ArrayDeque Class element() method) element() Method is available in java.lang package. element()方法在java.lang包中可用。 element() Method is used to retrieve the first element of the deque but without removing t…

can收發器 rx_CANOpen系列教程03 _CAN收發器功能、原理及作用

1寫在前面前面文章是從大方向介紹了CAN網絡,讓大家對CAN網絡有一定的認識。本文將范圍縮小,講述整個CAN網絡其中的一個CAN收發器。如下圖標記出來的部分:本文結合眾多初學者容易產生的疑問來講述CAN收發器相關的知識點,大概有如下…

操作系統文件分配策略_操作系統中的文件分配方法

操作系統文件分配策略分配方法 (Allocation Method) The allocation method defines how the files are stored in the disk blocks. The direct access nature of the disks gives us the flexibility to implement the files. In many cases, different files or many files …

簡述container與container-fluid的區別

在bootstrap中的布局容器一欄中,提供了container與container-fluid兩種容器,其官方解釋為: .container 類用于固定寬度并支持響應式布局的容器。 .container-fluid 類用于 100% 寬度,占據全部視口(viewport&#xff09…

centos php fpm 停止_如何關閉php-fpm進程?

因為你是編譯的,可以在源碼中復制php-fpm的init文件到系統中:cp -f sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm然后就可以使用以下命令啟動、停止、重啟和重新加載php-fpm了:service php-fpm startservice php-fpm restartservice php-fpm…

minus_Java Duration類| minus()方法與示例

minus持續時間類minus()方法 (Duration Class minus() method) Syntax: 句法: public Duration minus(Duration d);public Duration minus(long amt, TemporalUnit t_unit);minus() method is available in java.time package. minus()方法在java.time包中可用。 m…

Mongodb聚合函數

插入 測試數據 for(var j1;j<3;j){ for(var i1;i<3;i){ var person{Name:"jack"i,Age:i,Address:["henan","wuhan"],Course:[{Name:"shuxue",Score:i},{Name:"wuli",Score:i}]}db.DemoTest.Person.insert(pers…

php rename函數_php rename函數怎么用

PHP rename()函數用于重命名文件或目錄&#xff0c;語法“rename(文件舊名稱,新名稱,句柄環境)”&#xff0c;使用用戶指定的新名稱更改文件或目錄的舊名稱&#xff0c;并且可以根據需要在目錄之間移動&#xff1b;成功時返回True&#xff0c;失敗時返回False。php rename()函數…

Java BigInteger類| xor()方法與示例

BigInteger類的xor()方法 (BigInteger Class xor() method) xor() method is available in java.math package. xor()方法在java.math包中可用。 xor() method is used to perform xor operation between this BigInteger and the given BigInteger and we all know when we pe…

Spring Data Redis實戰之提供RedisTemplate

為什么80%的碼農都做不了架構師&#xff1f;>>> 參考&#xff1a; http://www.cnblogs.com/edwinchen/p/3816938.html 本項目創建的是Maven項目 一、pom.xml引入dependencies <dependency><groupId>org.springframework.data</groupId><artif…

Java BigInteger類| and()方法與示例

BigInteger類和()方法 (BigInteger Class and() method) and() method is available in java.math package. and()方法在java.math包中可用。 and() method is used to perform and operation between this BigInteger and the given BigInteger (val) [i.e. (this BigInteger)…

php映射,PHP實現路由映射到指定控制器

自定義路由的功能&#xff0c;指定到pathinfo的url上,再次升級之前的腳本SimpleLoader.phpclass SimpleLoader{public static function run($rulesarray()){header("content-type:text/html;charsetutf-8");self::register();self::commandLine();self::router($rule…

stl vector 函數_vector :: clear()函數,以及C ++ STL中的示例

stl vector 函數C vector :: clear()函數 (C vector::clear() function) vector::clear() is a library function of "vector" header, it is used to remove/clear all elements of the vector, it makes the 0 sized vector after removing all elements. vector …

Commonjs規范及Node模塊實現

前面的話 Node在實現中并非完全按照CommonJS規范實現&#xff0c;而是對模塊規范進行了一定的取舍&#xff0c;同時也增加了少許自身需要的特性。本文將詳細介紹NodeJS的模塊實現 引入 nodejs是區別于javascript的&#xff0c;在javascript中的頂層對象是window&#xff0c;而在…

thinkphp3 php jwt,ThinkPHP5 使用 JWT 進行加密

- 使用 Composer安裝此擴展- 代碼示例<?php /*** [InterCommon-接口公用]* Author RainCyan* DateTime 2019-08-12T16:38:080800*/namespace app\hladmin\controller;use think\Controller;use \Firebase\JWT\JWT;class InterCommonController extends Controller {private…