1. 程式人生 > >Java面向對象—多態

Java面向對象—多態

弊端 連接數 ring system cast 擴展 一個 exceptio ora

概述:同一個事物,在不同的時刻表現出不同的狀態。

代碼中如何體現:

要有繼承, 要有方法重寫, 父類引用指向子類對象

多態的成員訪問特點

成員變量:編譯看左邊(父類), 運行看左邊

成員方法:編譯看左邊,運行看右邊(子類)對象(註意:這就是多態的精華)---父類引用指向子類對象,在執行的過程中執行子類重寫的方法

構造方法:子類不能繼承構造方法,默認訪問父類空參構造

靜態方法:編譯看左邊,運行看左邊

package cn.czbk.no5;

import java.util.Scanner;

public class PolyTest {
    public void polyUse(DBConn dbtype){
        dbtype.conn();
        
/** * 向上類型轉換後父類引用就不能使用子類特有的功能 * 通過向下類型轉換(強制類型轉換)可以解決這個問題 */ OracleConn oracle =(OracleConn)dbtype; oracle.oraclePrint(); } public static void main(String[] args) { DBConn dbtype = null; PolyTest pt=new PolyTest(); //在用戶輸入之前你並不知道要調用哪一個數據庫連接
//在程序執行之後用戶輸入完畢之後才能確認 Scanner sc =new Scanner(System.in); String dbName=sc.nextLine(); switch (dbName) { case "Oracle": dbtype=new OracleConn(); break; case "DB2": dbtype=new DB2Conn(); break; case "Mysql": dbtype
=new MysqlConn(); break; default: System.out.println("end"); break; } //多態的使用可以減少代碼的編寫,直接下面一句話就可以了 //提高代碼的擴展性,要加其他類型的數據庫的話直接在下面加就可以了上面的並不需要改 pt.polyUse(dbtype); } } class DBConn{ public void conn(){ System.out.println("連接數據庫"); } } class OracleConn extends DBConn{ public void conn(){ System.out.println("連接Oracle數據庫"); } public void oraclePrint(){ System.out.println("%like%"); } } class DB2Conn extends DBConn{ public void conn(){ System.out.println("連接DB2數據庫"); } } class MysqlConn extends DBConn{ public void conn(){ System.out.println("連接Mysql數據庫"); } }

多態的好處: 提高代碼的擴展性;

如何使用多態?

1.寫一個父類

2. 寫一個或多個子類, 重寫父類的方法

3.寫一個使用類,在使用類中寫一個方法,方法的參數類型定義為父類類型.

4.調用使用類的方法,傳入不同的子類對象

多態的弊端: 不能調用子類特有功能.

如何解決: 向下轉型(強制轉換):

向上轉型和向下轉型 向上轉型:

1. Animal a = new Cat();

2. Cat c = new Cat(); Animal a2 = c; 向下轉型(強制轉換): Cat c2 = (Cat)a;

註意:java.lang.ClassCastException,異常經常在向下轉型中出現,不能指鹿為馬.

Java面向對象—多態