瞭解多型
類的多型
需求:有四個類,Student、Worker、Teacher、Doctor要求在一個類中定義方法來將以上類作為方法的引數接受。現在能想到可以使用方法的過載接受。如下:
package com.CoderLB;
import java.io.Serializable;
import java.sql.SQLOutput;
public class Student {
public void say() {
System.out.println("我是一個學生");
}
}
package com.CoderLB;
public class Teacher {
public void say(){
System.out.println("我是一個老師");
}
}
package com.CoderLB;
import java.io.Serializable;
public class Worker{
public void say() {
System.out.println("我是一個工人");
}
}
package com.CoderLB;
public class Doctor {
public void say(){
System.out.println("我是一個醫生");
}
}
package com.CoderLB;
public class Apply {
public void getInfo(Student s){
s.say();
}
public void getInfo(Teacher t){
t.say();
}
public void getInfo(Worker w){
w.say();
}
public void getInfo(Doctor d){
d.say();
}
}
package com.CoderLB;
import java.util.Scanner;
public class Hi {
public static void main(String[] args) {
Apply app=new Apply();
app.getInfo(new Student());
app.getInfo(new Teacher());
app.getInfo(new Worker());
app.getInfo(new Doctor());
}
}
上述使用過載方法實現了需求,但是存在有弊端,假如型別很多,那麼在Apply中過載的方法也需要很多。這樣程式碼的應變性不高,耦合度不高,依賴性強。此時就可以多型的特徵解決(向上轉型),可以將接受引數的方法的引數型別定義為所有類的父類。
package com.CoderLB;
/**
* 定義一個抽象類
*/
public abstract class Person {
public abstract void say();
}
package com.CoderLB;
import java.io.Serializable;
import java.sql.SQLOutput;
public class Student extends Person {
public void say() {
System.out.println("我是一個學生");
}
}
package com.CoderLB;
import java.io.Serializable;
public class Worker extends Person{
public void say() {
System.out.println("我是一個工人");
}
}
package com.CoderLB;
public class Doctor extends Person {
public void say(){
System.out.println("我是一個醫生");
}
}
package com.CoderLB;
public class Teacher extends Person {
public void say(){
System.out.println("我是一個老師");
}
}
package com.CoderLB;
public class Apply {
public void getInfo(Person per){
per.say();
}
}
package com.CoderLB;
import java.util.Scanner;
public class Hi {
public static void main(String[] args) {
Apply app=new Apply();
app.getInfo(new Teacher());//Person per = new Teacher() 向上轉型
app.getInfo(new Worker());
app.getInfo(new Student());
app.getInfo(new Doctor());
}
}
//輸出
我是一個老師
我是一個工人
我是一個學生
我是一個醫生
Apply類中的getInfo方法就不需要過載了,這就是多型的好處的直接體現。使用了多型實現了方法引數的統一。
相關文章
- 【41】瞭解隱式介面和編譯期多型編譯多型
- [譯] 瞭解“多型”JSON 資料的效能問題多型JSON
- 一文帶你瞭解python中的多型Python多型
- 多瞭解一點Activity
- Java 泛型,你瞭解型別擦除嗎?Java泛型型別
- 深入瞭解JS型別判斷JS型別
- 用了這麼多年的 Java 泛型,你對它到底有多瞭解?Java泛型
- 瞭解JavaScript中的型別轉換JavaScript型別
- 瞭解 Go 1.9 的型別別名Go型別
- 多型 簡單講解多型
- Java反射—方法的反射、深入瞭解泛型Java反射泛型
- 多型記憶體圖解多型記憶體圖解
- java基礎-多執行緒初步瞭解Java執行緒
- iOS 9 每天瞭解多一點 :: 目錄iOS
- python 多型 協議詳解Python多型協議
- Java多執行緒與併發 - 瞭解“monitor”Java執行緒
- Java泛型用了這麼多年,你真的瞭解嗎?Java泛型
- 你可能不瞭解的 Promise 微任務型別Promise型別
- 你不得不瞭解的CSS資料型別CSS資料型別
- JavaScript中的型別判斷,瞭解一下?JavaScript型別
- ? 一文帶你瞭解多檔案混淆加密加密
- 多型。多型
- 多型~多型
- 多型多型
- 帶你瞭解營銷型網站的核心要素網站
- 影響遊戲ROI的多種因素你都瞭解嗎?遊戲
- 分散式鎖的多種實現方式,你瞭解嗎?分散式
- 做大資料必須瞭解的多種處理框架大資料框架
- 瞭解 JavaScript 函數語言程式設計-型別簽名JavaScript函數程式設計型別
- 快速簡單的瞭解VLAN(VXLAN)和埠鏈路型別型別
- Java多型Java多型
- 多型一多型
- 11 #### 多型多型
- 多型性多型
- 多型,向上向下轉型多型
- 多型中的轉型多型
- runLoop瞭解OOP
- 瞭解webpackWeb