【超经典】Java多态有什么好处?怎样用?
生活随笔
收集整理的這篇文章主要介紹了
【超经典】Java多态有什么好处?怎样用?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
多態可以分為變量的多態,方法的多態,類的多態.我這里強調的是類的多態,這是在以后的工作中經常會用到的。多態的表現形式有方法重載,方法改寫,多態變量和泛型。重載是一種靜態的多態性,在程序編譯時確定被調用的方法,稱為早綁定。而多態變量和改寫相結合之后,方法的調用在運行時才能確定,是動態的多態性,稱為晚綁定。
首先,有這樣一個系統:有個學生從蘭理工畢業了,做得還不錯.買了輛捷達汽車.這個系統應該如何設計呢? 按照面向對象的思想,我們會抽象出來一個類,表示捷達汽車,其中有個run()方法 public class JD{public void run(){System.out.println("JD在以120邁的速度在run");} }我們還會抽象出一個類,來代表人.其中有個drive()方法,需要一個汽車類型作為參數,我們先傳入一個JD類型的參數
// <strong><span style="color:#ff0000;">這是我們的核心業務類</span></strong> public class Person{public void <span style="color:#ff0000;">drive(JD jd)</span>{ <span style="color:#ff0000;">//寫死了類型,修改麻煩</span>jd.run();}public static void main(String args[]){Person p =new Person();JD jd = new JD();<span style="color:#ff0000;"> p.drive(jd); //只能傳入JD類型 </span> } } 如果你寫出這樣的代碼的話,恭喜你! 你完蛋了-------------項目經理會有砍死你的沖動!!!!!!! 項目經理為什么會砍你呢? ---------因為你寫的代碼偶合性太強了! ? 如果我們的需求變了,這個學生后來更有錢了,買了一兩Benz.那么我們以前的系統怎么辦啊.不要指望你作的系統永遠不會變化,我們的系統只能修改!這就是項目經理砍你的原因 我們的系統會增加一個Benz類,也有個run()方法 public class Benz{public void run(){System.out.println("Benz在以200邁的速度在run");} }我們的核心業務類也要修改
public class Person{/* public void drive(JD jd){jd.run(); } */public void drive(Benz b){b.run(); }public static void main(String args[]){Person p =new Person();Benz b = new Benz();p.drive(b); } }以后的情況,我們可以把車抽象出來:(體現多態的好處) public abstract class Driver{/*屬性*/public void run();//讓子類來運行 }public Benz extends Driver{public void run(){ System.out.println("Benz在以200邁的速度在run");} }public JD extends Driver{public void run(){System.out.println("JD is running...");} }public class Person{ private Driver driver; public Person(){} public Person(Driver driver){this.driver = driver; } public void drive(){driver.run(); } public void setDriver(Driver driver){ //運用參數多態,以后方便修改車型this.driver = driver; } public static void main(String args[]){Person p =new Person();JD jd = new JD(); //剛開始沒錢就買輛JD吧p.setDriver(jd);p.drive();Benz benz = new Benz{();//有錢換車了p.setDriver(benz);p.drive(); } }哈哈,童靴們仔細體會一下多態的好處吧!!!
總結
以上是生活随笔為你收集整理的【超经典】Java多态有什么好处?怎样用?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为性格面试的破解方法
- 下一篇: 【小米校招笔试】给定一些线段,线段有起点