Are You OK?小米印度版 MiPay 軟體獲登記批准
阿新 • • 發佈:2021-12-30
多型
即同一方法可以根據傳送物件的不同而採取多種不同的行為方式
注意:
- 多型是方法的多型,屬性沒有多型
- 父類和子類有聯絡(ClassCastException型別轉換異常)
- 多型存在條件:
- 繼承關係
- 方法重寫
- 父類引用指向子類物件 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();
}
}
子類能呼叫的方法都是自己的或繼承父類的方法
父類可以指向子類,但不能呼叫子類獨有的方法,但是父類可以強制轉換成子類呼叫
物件能執行哪些方法看物件左邊的型別,與右邊關係不大