1. 程式人生 > 資訊 >Are You OK?小米印度版 MiPay 軟體獲登記批准

Are You OK?小米印度版 MiPay 軟體獲登記批准

多型

即同一方法可以根據傳送物件的不同而採取多種不同的行為方式

注意:

  1. 多型是方法的多型,屬性沒有多型
  2. 父類和子類有聯絡(ClassCastException型別轉換異常)
  3. 多型存在條件:
    • 繼承關係
    • 方法重寫
    • 父類引用指向子類物件 Father f1=new Son();

若方法是static、final、private修飾的則不能被重寫

package com.yuanyu.Oop;

public class Application {
    public static void main(String[] args) {
        //一個物件的實際型別是確定的
        //new Person();
        //new Student();

        //可以指向的引用型別是不確定的
        Student  s1= new Student();
        Person s2 = new Student(); //父類的引用指向子類
        Object s3=new Student();
    }
}

一個物件實際型別(右邊)是確定的但引用型別(左邊)是不確定的

package com.yuanyu.Oop;

public class Person {
    public void run(){
        System.out.println("Run");
    }
}

package com.yuanyu.Oop;

public class Student extends Person {
   
}

package com.yuanyu.Oop;

public class Application {
    public static void main(String[] args) {
        //一個物件的實際型別是確定的
        //new Person();
        //new Student();

        //可以指向的引用型別是不確定的
        Student  s1= new Student();
        Person s2 = new Student(); //父類的引用指向子類
        Object s3=new Student();

        s2.run(); //Run

    }
}

子類繼承了父類的全部方法,因此可以輸出Run

在子類中進行方法的重寫

package com.yuanyu.Oop;

public class Student extends Person {
    @Override
    public void run() {
        System.out.println("Son");
    }
}

package com.yuanyu.Oop;

public class Application {
    public static void main(String[] args) {
        //一個物件的實際型別是確定的
        //new Person();
        //new Student();

        //可以指向的引用型別是不確定的
        Student  s1= new Student();
        Person s2 = new Student(); //父類的引用指向子類
        Object s3=new Student();
        
        s1.run(); //Son
        s2.run(); //Son
    }
}

子類一旦重寫父類的方法,執行的是子類方法

在子類中新增新的方法

package com.yuanyu.Oop;

public class Student extends Person {
    @Override
    public void run() {
        System.out.println("Son");
    }

    public void eat(){
        System.out.println("eat");
    }
}

package com.yuanyu.Oop;

public class Application {
    public static void main(String[] args) {
        //一個物件的實際型別是確定的
        //new Person();
        //new Student();

        //可以指向的引用型別是不確定的
        Student  s1= new Student();
        Person s2 = new Student(); //父類的引用指向子類
        Object s3=new Student();

        s1.eat();
        s2.eat(); //報錯
        ((Student) s2).eat();
    }
}

子類能呼叫的方法都是自己的或繼承父類的方法

父類可以指向子類,但不能呼叫子類獨有的方法,但是父類可以強制轉換成子類呼叫

物件能執行哪些方法看物件左邊的型別,與右邊關係不大