天天看點

java為什麼要引入多态_什麼是多态?為什麼要使用多态

用最簡單的一句話就是:父類型的引用指向子類型的對象。用一句比較通俗的話:同一操作作用于不同的對象,可以産生不同的效果。這就是多态。

這句話很好了解:Person person = new Student("張三");但是這個多态有什麼作用呢?而我們又為什麼要是有多态呢?

首先講下封裝和繼承:封裝是把過程和資料包圍起來,對資料的通路隻能通過已定義的界面,他把實作的細節影藏起來了,比如你在java中去實作一個類,這個類中提供了一些功能方法,你隻需要知道你需要傳遞什麼樣的參數,會達到什麼樣的效果,實作細節在類中定義好了。進而使得代碼子產品化;而繼承可以擴充已存在的代碼子產品,而目的就是為了代碼重用。

那麼多态除了代碼的複用,還可以解耦。然而為什麼要解耦?耦合度講的是子產品子產品之間,代碼代碼之間的關聯度,通過對系統的分析把他分解成一個一個子子產品,子子產品提供穩定的接口,達到降低系統耦合度的的目的,子產品子產品之間盡量使用子產品接口通路,而不是随意引用其他子產品的成員變量。

多态有什麼好處?

有兩個好處:

1. 應用程式不必為每一個派生類編寫功能調用,隻需要對抽象基類進行處理即可。大大提高程式的可複用性。//繼承

2. 派生類的功能可以被基類的方法或引用變量所調用,這叫向後相容,可以提高可擴充性和可維護性。 //多态的真正作用,

多态在什麼地方用?

可以用在方法的參數中和方法的傳回類型中。

在方法中的參數,請看下面的例子:

public abstract class Driver

{

public void run();//讓子類來運作

}

class SBenz : Driver

{

public void run()

{

Console.WriteLine("Benz在以200邁的速度在run");

}

}

class JD : Driver

{

public void run()

{

Console.WriteLine("JD is running...");

}

}

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;

}

}

static void Main(string[] args)

{

Person p = new Person();

JD jd = new JD();//剛開始沒錢就買輛JD吧

p.setDriver(jd);

p.drive();

SBenz benz = new SBenz();//有錢換車了

p.setDriver(benz);

p.drive();

}

在方法的傳回類型中,請看下面的例子:

上面的例子中,不管是JD還是Benz都是我們自己直接new出來的.我們可以設計一個工廠類,專門生成汽車

public class CarFactory

{

public Driver factory(String carName)

{

if (carName.Equals("JD"))

{

return new JD();

}

else if (carName.Equals("Benz"))

{

return new SBenz();

}

else

{

Console.WriteLine("對比起,不伺候");

return null;

}

}

}

類型的參數.,傳入參數的時候,可以傳入任何一個類的對象,隻要是對應的類的對象名稱就可以了

這就是多态的應用!