1. 程式人生 > >Java學習筆記9(面象對象9:多態)

Java學習筆記9(面象對象9:多態)

直接 引用類型 nds 指向 ati 向上轉型 true 擴展 繼承

多態概述

    多態是繼封裝、繼承後,面對對象的第三大特性。

    現實事物經常會出現多態,如學生,學生是人的一種,則一個具體的同學張三既是學生也是人,即出現兩種形態。

    Java作為面向對象的語言,同樣可以描述一個事物的多種形態。如Student類繼承了Person類,一個Student的對象便

  既是Student,又是Person。

    Java種多態的代碼體現在一個子類對象(實現類對象)既可以給這個子類(實現類對象)引用變量賦值,又可以給這

  個子類(實現類對象)的父類(接口)變量賦值。如:Student類可以為Person類的子類。那麽一個Student對象 s既可以賦

  值給一個Student類型的引用,也可以賦值給一個Person類型的引用。

   Student s=new Student(); Person s=new Student();

    最終多態 體現為父類引用變量可以指向子類對象。左父 右子

    多態的前提是必須有子父類關系或者類實現接口關系,否則無法完成多態

    在使用多態後的父類引用變量調用方法時,會調用子類重寫後的方法。

public class Person {
    public void speak(){
        System.out.println("說話");
    }
}
public class Student extends Person{ public void speak(){//重寫speak方法 System.out.println("不說話"); } public void study(){ System.out.println("學習"); } } public class Test { public static void main(String[] args) { //多態創建變量:父類引用類型 變量名=new 子類(); Person s=new
Student(); s.speak();//調用speak方法,運行結果為:不說話,可以看出調用的是子類重寫後的方法 } }

調用多態的格式

    A:多態的定義格式:父類類型 變量名=new 子類類型();變量名.方法名();

    B:抽象類多態定義格式:抽象類 變量名=new 抽象類子類();

    C: 接口多態定義的格式:接口 變量名=new 接口實現類();

    註意事項:同一個父類的方法會被不同的子類重寫。在調用方法時,調用的為各個子類重寫後的方法。

instanceof關鍵字

  作用:可以通過instanceof關鍵字來判斷某個對象是否屬於某種數據類型。如學生的對象屬於學生類,學生的對象也屬於

  人的類。instanceof的用法: (要判斷的對象)s instanceof (要判斷的數據類型)如:

public class Test {
    public static void main(String[] args) {
        //多態創建變量:父類引用類型  變量名=new 子類();
        Student s=new Student();
        Person p=new Person();
        if (s instanceof Person) {//判斷Student類的對象s是否屬於Person數據類型
            System.out.println("true");//因為Student類時Person的子類,所以條件成立,輸出true
        }
        boolean x=p instanceof Student;/*定義變量x接收判斷結果,判斷條件是Person 對象p是否屬於Student數據類型;很明顯不屬於*/
        System.out.println(x);//輸出結果flase
        
        
    }
}

多態轉型:

  多態的轉型分為向上轉型和向下轉型兩種:

  向上轉型:當有子類對象賦值給一個父類引用時,便是向上轉型,多態本身就是向上轉型的過程。

        使用格式:父類類型 變量名=new 子類類型();

  向下轉型:一個已經向上轉型的子類對象可以使用強制類型轉換的格式,將父類引用轉為子類引用,這個過程時向下轉

      型。如果是直接創建父類對象,是無法向下轉型的!

        使用格式:子類類型 變量名=(子類類型)父類類型的變量;

        如;Student stu=(Student) p;

多態的好處和弊端

    當父類的引用類型指向子類對象時,就發生了向上轉型,即把子類類型對象轉成了父類類型。

    向上轉型的好處是隱藏了子類類型,提高了代碼的擴展性。

    但向上轉型也有弊端,只能使用父類共性的內容,而無法使用子類特有的功能,功能有限。

 多態運行看右邊,編譯看左邊

    (個人理解,當父類需要調用子類重寫過的同名方法時,用多態向上轉型,當父類需要調用子類自己的方法的時候,用向下轉型)

Java學習筆記9(面象對象9:多態)