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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java面向对象的特征三:多态性 —(15)

發布時間:2023/12/13 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java面向对象的特征三:多态性 —(15) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.多態性的理解:可以理解為一個事物的多種形態。

2.何為多態性:

對象的多態性:父類的引用指向子類的對象(或子類的對象賦給父類的引用)
舉例:
Person p = new Man();
Object obj = new Date();

3.多態性的使用:虛擬方法調用

有了對象的多態性以后,我們在編譯期,只能調用父類中聲明的方法,但在運行期,我們實際執行的是子類重寫父類的方法。
總結:編譯,看左邊;運行,看右邊。

4.多態性的使用前提:

① 類的繼承關系 ② 方法的重寫

5.多態性的應用舉例:

舉例一:
public void func(Animal animal){//Animal animal = new Dog();
animal.eat();
animal.shout();
}
舉例二:
public void method(Object obj){

}

舉例三:
class Driver{

public void doData(Connection conn){//conn = new MySQlConnection(); / conn = new OracleConnection();//規范的步驟去操作數據

// conn.method1();
// conn.method2();
// conn.method3();

}

}

6.多態性使用的注意點:

對象的多態性,只適用于方法,不適用于屬性(編譯和運行都看左邊)


7.關于向上轉型與向下轉型:

7.1 向上轉型:多態
7.2 向下轉型:
7.2.1 為什么使用向下轉型:
有了對象的多態性以后,內存中實際上是加載了子類特有的屬性和方法的,但是由于變量聲明為父類類型,導致編譯時,只能調用父類中聲明的屬性和方法。子類特有的屬性和方法不能調用。如何才能調用子類特的屬性和方法?使用向下轉型。
7.2.2 如何實現向下轉型:
使用強制類型轉換符:()
7.2.3 使用時的注意點:
① 使用強轉時,可能出現ClassCastException的異常。
② 為了避免在向下轉型時出現ClassCastException的異常,我們在向下轉型之前,先進行instanceof的判斷,一旦返回true,就進行向下轉型。如果返回false,不進行向下轉型。
7.2.4 instanceof的使用:
① a instanceof A:判斷對象a是否是類A的實例。如果是,返回true;如果不是,返回false。
② 如果 a instanceof A返回true,則 a instanceof B也返回true.其中,類B是類A的父類。
③ 要求a所屬的類與類A必須是子類和父類的關系,否則編譯錯誤。
7.2.5 圖示:

8. 面試題:

8.1 談談你對多態性的理解?
① 實現代碼的通用性。
② Object類中定義的public boolean equals(Object obj){ }
JDBC:使用java程序操作(獲取數據庫連接、CRUD)數據庫(MySQL、Oracle、DB2、SQL Server)
③ 抽象類、接口的使用肯定體現了多態性。(抽象類、接口不能實例化)
8.2 多態是編譯時行為還是運行時行為?

1.java.lang.Object類的說明:

  • 1.Object類是所Java類的根父類
  • 2.如果在類的聲明中未使用extends關鍵字指明其父類,則默認父類為java.lang.Object類
  • 3.Object類中的功能(屬性、方法)就具通用性。
  • 屬性:無
  • 方法:equals() / toString() / getClass() /hashCode() / clone() / finalize()
  • wait() 、 notify()、notifyAll()
  • Object類只聲明了一個空參的構造器

2.equals()方法

2.1 equals()的使用:

  • 是一個方法,而非運算符
    • 只能適用于引用數據類型
    • Object類中equals()的定義:
    • public boolean equals(Object obj) {
      return (this == obj);
      }
    • 說明:Object類中定義的equals()和==的作用是相同的:比較兩個對象的地址值是否相同.即兩個引用是否指向同一個對象實體
    • 像String、Date、File、包裝類等都重寫了Object類中的equals()方法。重寫以后,比較的不是
    • 兩個引用的地址是否相同,而是比較兩個對象的"實體內容"是否相同。
    • 通常情況下,我們自定義的類如果使用equals()的話,也通常是比較兩個對象的"實體內容"是否相同。那么,我們
    • 就需要對Object類中的equals()進行重寫.
    • 重寫的原則:比較兩個對象的實體內容是否相同.
      2.2 如何重寫equals()
      2.2.1 手動重寫舉例:
      class User{
      String name;
      int age;
      //重寫其equals()方法
      public boolean equals(Object obj){
      if(obj == this){
      return true;
      }
      if(obj instanceof User){
      User u = (User)obj;
      return this.age == u.age && this.name.equals(u.name);
      }
      return false;
      }
      }
      2.2.2 開發中如何實現:自動生成的
      2.3 回顧 == 運算符的使用:
    • == :運算符
    • 可以使用在基本數據類型變量和引用數據類型變量中
    • 如果比較的是基本數據類型變量:比較兩個變量保存的數據是否相等。(不一定類型要相同)
    • 如果比較的是引用數據類型變量:比較兩個對象的地址值是否相同.即兩個引用是否指向同一個對象實體
    • 補充: == 符號使用時,必須保證符號左右兩邊的變量類型一致。

    3. toString()方法

    3.1 toString()的使用:

  • 當我們輸出一個對象的引用時,實際上就是調用當前對象的toString()
    • Object類中toString()的定義:
    • public String toString() {
      return getClass().getName() + “@” + Integer.toHexString(hashCode());
      }
    • 像String、Date、File、包裝類等都重寫了Object類中的toString()方法。
    • 使得在調用對象的toString()時,返回"實體內容"信息
    • 自定義類也可以重寫toString()方法,當調用此方法時,返回對象的"實體內容"
      3.2 如何重寫toString()
      舉例:
      //自動實現
      @Override
      public String toString() {
      return “Customer [name=” + name + “, age=” + age + “]”;
      }

    4.面試題:

    ① final、finally、finalize的區別?
    ② == 和 equals() 區別

    * Java中的JUnit單元測試

    • 步驟:
    • 1.中當前工程 - 右鍵擇:build path - add libraries - JUnit 4 - 下一步
    • 2.創建Java類,進行單元測試。
    • 此時的Java類要求:① 此類是public的 ②此類提供公共的無參的構造器
    • 3.此類中聲明單元測試方法。
    • 此時的單元測試方法:方法的權限是public,沒返回值,沒形參
    • 4.此單元測試方法上需要聲明注解:@Test,并在單元測試類中導入:import org.junit.Test;
    • 5.聲明好單元測試方法以后,就可以在方法體內測試相關的代碼。
    • 6.寫完代碼以后,左鍵雙擊單元測試方法名,右鍵:run as - JUnit Test
    • 說明:
    • 1.如果執行結果沒任何異常:綠條
    • 2.如果執行結果出現異常:紅條

    1.為什么要有包裝類(或封裝類)

    為了使基本數據類型的變量具有類的特征,引入包裝類。

    2.基本數據類型與對應的包裝類:

    3.需要掌握的類型間的轉換:(基本數據類型、包裝類、String)

    簡易版:

    基本數據類型<—>包裝類:JDK 5.0 新特性:自動裝箱 與自動拆箱
    基本數據類型、包裝類—>String:調用String重載的valueOf(Xxx xxx)
    String—>基本數據類型、包裝類:調用包裝類的parseXxx(String s)
    注意:轉換時,可能會報NumberFormatException
    應用場景舉例:
    ① Vector類中關于添加元素,只定義了形參為Object類型的方法:
    v.addElement(Object obj); //基本數據類型 —>包裝類 —>使用多態

    總結

    以上是生活随笔為你收集整理的java面向对象的特征三:多态性 —(15)的全部內容,希望文章能夠幫你解決所遇到的問題。

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