日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 多态、抽象类 笔记

發布時間:2024/9/20 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 多态、抽象类 笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. Java 多態

多態就是同一個接口,使用不同的實例而執行不同操作.

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

  • 繼承
  • 重寫
  • 父類引用指向子類對象(Parent p = new Child();)

當使用多態方式調用方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;如果有,再去調用子類的同名方法。(很重要)
多態的好處:可以使程序有良好的擴展,并可以對所有類的對象進行通用處理

public class Test {public static void main(String[] args) {show(new Cat()); // 以 Cat 對象調用 show 方法show(new Dog()); // 以 Dog 對象調用 show 方法Animal a = new Cat(); // 向上轉型 a.eat(); // 調用的是 Cat 的 eatCat c = (Cat)a; // 向下轉型 c.work(); // 調用的是 Cat 的 work} public static void show(Animal a) {a.eat(); // 類型判斷if (a instanceof Cat) { // 貓做的事情 Cat c = (Cat)a; c.work(); } else if (a instanceof Dog) { // 狗做的事情 Dog c = (Dog)a; c.work(); } } }abstract class Animal { abstract void eat(); } class Cat extends Animal { public void eat() { System.out.println("吃魚"); } public void work() { System.out.println("抓老鼠"); } } class Dog extends Animal { public void eat() { System.out.println("吃骨頭"); } public void work() { System.out.println("看家"); } }

執行以上程序,輸出結果為:

吃魚 抓老鼠 吃骨頭 看家 吃魚 抓老鼠

1.2 虛方法

我們已經討論了方法的重寫,也就是子類能夠重寫父類的方法。
當子類對象調用重寫的方法時,調用的是子類的方法,而不是父類中被重寫的方法。
要想調用父類中被重寫的方法,則必須使用關鍵字super。

例子:

  • 如果實例中,實例化了兩個 Salary 對象:一個使用 Salary 引用 s,另一個使用 Employee 引用 e。
  • 當調用 s.mailCheck() 時,編譯器在編譯時會在 Salary 類中找到 mailCheck(),執行過程 JVM 就調用 Salary 類的 mailCheck()。
  • 因為 e 是 Employee 的引用,所以調用 e 的 mailCheck() 方法時,編譯器會去 Employee 類查找 mailCheck() 方法
  • 在編譯的時候,編譯器使用 Employee 類中的 mailCheck() 方法驗證該語句, 但是在運行的時候,Java虛擬機(JVM)調用的是 Salary 類中的 mailCheck() 方法。

以上整個過程被稱為虛擬方法調用,該方法被稱為虛擬方法

1.3 多態的實現方式

方式一:重寫:
方式二:接口

  • 生活中的接口最具代表性的就是插座,例如一個三接頭的插頭都能接在三孔插座中,因為這個是每個國家都有各自規定的接口規則,有可能到國外就不行,那是因為國外自己定義的接口類型。
  • java中的接口類似于生活中的接口,就是一些方法特征的集合,但沒有方法的實現。
  • 方式三:抽象類和抽象方法

    注:類的屬性變量是能重寫(覆蓋)

    class Animal{public int age;public void move(){System.out.println("動物可以移動");} }class Dog extends Animal{public double age;public void move(){age = 10.00;System.out.println("狗可以跑和走");}public void bark(){System.out.println("狗可以吠叫");} }class Cat extends Animal{public void move(){super.age = 3;System.out.println("貓可以跳");} }public class TestOverride{public static void main(String args[]){Animal a = new Animal(); // Animal 對象Animal b = new Dog(); // Dog 對象Dog c = new Dog();Cat d = new Cat();a.move();// 執行 Animal 類的方法b.move();//執行 Dog 類的方法c.move();//執行 Dog 類的方法d.move();//執行 Cat 類的方法Object aValue = a.age;Object bValue = b.age;Object cValue = c.age;System.out.println("The type of "+a.age+" is "+(aValue instanceof Double ? "double" : (aValue instanceof Integer ? "int" : "")));System.out.println("The type of "+b.age+" is "+(bValue instanceof Double ? "double" : (bValue instanceof Integer ? "int" : "")));System.out.println("The type of "+c.age+" is "+(cValue instanceof Double ? "double" : (cValue instanceof Integer ? "int" : "")));// 覆蓋age屬性System.out.println("The age of cat is "+d.age);} }

    編譯值:

    動物可以移動 狗可以跑和走 狗可以跑和走 貓可以跳 The type of 0 is int The type of 0 is int The type of 10.0 is double The age of cat is 3

    注;多態引用時,構造子類對象時的構造方法的調用順序

    1,先調用超類的構造方法,多重超類首先調用最遠超類的方法;
    2,然后再執行當前子類的構造方法;

    調用時需要謹慎處理調用方法

    2. Java 抽象類

    在面向對象的概念中,所有的對象都是通過類來描繪的,但是反過來,并不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。

    抽象類除了不能實例化對象之外,類的其它功能依然存在,成員變量、成員方法和構造方法的訪問方式和普通類一樣。
    由于抽象類不能實例化對象,所以抽象類必須被繼承,才能被使用。也是因為這個原因,通常在設計階段決定要不要設計抽象類
    父類包含了子類集合的常見的方法,但是由于父類本身是抽象的,所以不能使用這些方法。
    在Java中抽象類表示的是一種繼承關系一個類只能繼承一個抽象類,而一個類卻可以實現多個接口。

    2.1 抽象方法

    如果你想設計這樣一個類,該類包含一個特別的成員方法,該方法的具體實現由它的子類確定,那么你可以在父類中聲明該方法為抽象方法。
    Abstract關鍵字同樣可以用來聲明抽象方法,抽象方法只包含一個方法名,而沒有方法體。
    抽象方法沒有定義,方法名后面直接跟一個分號,而不是花括號。

    聲明抽象方法會造成以下兩個結果:

    • 如果一個類包含抽象方法,那么該類必須是抽象類。
    • 任何子類必須重寫父類的抽象方法,或者聲明自身為抽象類。

    繼承抽象方法的子類必須重寫該方法。否則,該子類也必須聲明為抽象類。最終,必須有子類實現該抽象方法,否則,從最初的父類到最終的子類都不能用來實例化對象。

    抽象類總結規定:

  • 抽象類不能被實例化(初學者很容易犯的錯),如果被實例化,就會報錯,編譯無法通過。只有抽象類的非抽象子類可以創建對象。
  • 抽象類中不一定包含抽象方法,但是有抽象方法的類必定是抽象類
  • 抽象類中的抽象方法只是聲明,不包含方法體,就是不給出方法的具體實現也就是方法的具體功能。
  • 構造方法,類方法(用static修飾的方法)不能聲明為抽象方法
  • 抽象類的子類必須給出抽象類中的抽象方法的具體實現,除非該子類也是抽象類。
  • 注意:子抽象類繼承父抽象類,必須顯性調用父抽象類的顯性構造器

    摘自:
    http://www.runoob.com/java/java-abstraction.html
    http://www.runoob.com/java/java-polymorphism.html

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的Java 多态、抽象类 笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲av无码专区在线电影 | 免费看黄色三级三级 | 亚洲国产av一区二区 | 国语对白做受欧美 | 夜色福利 | 国产av电影一区二区 | 99综合| 欧美变态网站 | 嫩草影院懂你的影院 | 韩毛片| 国产一区二区三区影视 | 69xx欧美 | www婷婷av久久久影片 | 一级久久久久久 | 日韩不卡av | 国产精品色婷婷99久久精品 | 婷婷啪啪 | 亚洲熟妇无码一区二区三区导航 | 天堂av中文在线 | 久久99日韩 | 日韩一区二区三区四区五区六区 | 国产视频精品免费 | 日美韩一区二区三区 | 午夜草草| 无码人妻精品一区二区三 | 瑟瑟视频在线看 | 欧美xxx在线观看 | 浓精h攵女乱爱av | 福利社91 | 少妇aaaaa| 精品一区二区三区视频 | 一级片一级 | 日本免费黄色小视频 | 韩国av三级| 精品人妻伦一二三区免费 | 91麻豆精品一二三区在线 | 色窝在线 | 影音先锋波多野结衣 | 国产精品人妖 | 久草国产在线观看 | 大陆明星乱淫(高h)小说 | 亚洲六月丁香色婷婷综合久久 | 国产女人18毛片水18精品 | 人人插人人爽 | 毛片久久久久 | 久久国产免费视频 | 午夜黄色一级片 | 四虎4hu | 伊人免费在线 | 污污免费观看 | 97香蕉超级碰碰久久免费软件 | 久久久久一级 | 丰满秘书被猛烈进入高清播放在 | 亚洲系列在线观看 | 日韩黄色一级片 | 91色在线播放 | 成人美女在线 | 91爱啪 | 国产乱国产乱老熟300部视频 | 色呦呦免费视频 | 国产精品一二三级 | 久久天堂电影 | 九九视频在线 | 成人在线天堂 | 91在线精品播放 | 精品国模一区二区三区欧美 | www日本www| 免费无码av片在线观看 | 午夜色大片 | 男人插入女人下面的视频 | 日本三级韩国三级三级a级按摩 | 福利姬在线观看 | 色久天| 99久久香蕉 | 日韩av片在线免费观看 | 日韩欧美www | 亚洲视频在线一区 | 国产一区二区在线不卡 | 二区不卡 | 亚洲性图一区二区 | 欧美一区二区久久久 | 日韩一级一区 | 黄色aaa大片 | 午夜国产视频 | 久久国产a| 在线不卡一区二区 | 亚洲欧美另类日韩 | 中文字幕第7页 | 玩弄丰满少妇xxxxx性多毛 | 国产精品高潮呻吟久久av黑人 | 成人伊人 | 国产精品毛片久久 | av999| 成人福利视频在线 | 色欲国产精品一区二区 | 亚洲高清免费 | 国产精品自拍偷拍视频 | 97精品人人妻人人 | 国产又大又黄又粗 |