更新時間:2020-10-29 17:47:21 來源:動力節點 瀏覽1301次
Java中多態是個很難理解的概念,但同時又是非常重要的概念。多態存在的三個必要條件一、要有繼承;二、要有重寫;三、父類引用指向子類對象。我們從字面上理解,就是一種類型的多種狀態,想要理解多態我們就不得不借用接口。本文我們就來探究接口和多態關系。
接口(interface)是抽象方法與常量值的集合;從本質上來講,接口是一種特殊的抽象類,這種抽象類中只包含常量與方法的定義,而沒有變量和方法的實現;與繼承關系類似,接口與實現類之間存在多態性。
我們先來看看多態的特性:
1.可替換性(substitutability)。多態對已存在代碼具有可替換性。
2.可擴充性(extensibility)。多態對代碼具有可擴充性。增加新的子類不影響已存在類的多態性、繼承性,以及其他特性的運行和操作。實際上新加子類更容易獲得多態功能。
3.接口性(interface-ability)。多態是超類通過方法簽名,向子類提供了一個共同接口,由子類來完善或者覆蓋它而實現的。
4.靈活性(flexibility)。它在應用中體現了靈活多樣的操作,提高了使用效率。
5.簡化性(simplicity)。多態簡化對應用軟件的代碼編寫和修改過程,尤其在處理大量對象的運算和操作時,這個特點尤為突出和重要。
Java中多態的實現方式:
1.接口實現
2.繼承父類進行方法重寫
3.同一個類中進行方法重載。
無論工作還是學習中,筆都是我們經常用到的工具。但是筆的種類又非常的繁多,鉛筆、簽字筆、水筆、毛筆、鋼筆...?,F在我們要對“筆”進行抽象,抽象成一個抽象父類“Pen”
package com.glmapper.demo.base;
/**
* 抽象父類:筆
* @author glmapper
*/
public abstract class Pen {
//筆的長度
private int length;
//顏色
private String color;
//類型
private String type;
//價格
private double price;
//寫字
public abstract void write(String cnt);
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}現在有兩個子類,分別是:鉛筆和鋼筆。
鉛筆類,繼承父類Pen,并重寫write方法
package com.glmapper.demo.base;
/**
* 鉛筆類 繼承父類 筆(滿足必要條件一:有繼承【其實如果是接口的話,implement實現也是可以的】)
* @author glmapper
*
*/
public class Pencil extends Pen{
/**
* 父類的抽象方法委托子類具體實現:覆蓋
*/
//滿足必要條件二:要有重寫【當然,如果是對于write有重載也是可以的,不同的概念而已】
@Override
public void write(String cnt) {
System.out.println("這是一只鉛筆寫的內容,內容是:"+cnt);
}
}
鋼筆類,繼承父類Pen,并重寫write方法
package com.glmapper.demo.base;
/**
* 鋼筆類 繼承父類 筆
* @author 17070738
*
*/
public class Fountainpen extends Pen{
@Override
public void write(String cnt) {
System.out.println("這是一支鋼筆寫的內容,內容是:"+cnt);
}
}
測試:
package com.glmapper.demo.base;
public class MainTest {
public static void main(String[] args) {
/* Pen pen= new Pencil();*/
//必要條件三:父類引用指向子類對象。
Pen pen= new Fountainpen();
pen.write("我是一支筆");
}
}
輸出結果:這是一支鋼筆寫的內容,內容是:我是一支筆
說明可替換性:多態對筆Pen類工作,對其他任何子類,如鉛筆、鋼筆,也同樣工作。可擴充性:在實現了鉛筆、鋼筆的多態基礎上,很容易增添“筆”類的多態性。
總而言之,接口和多態關系用一句話可以概括,接口和抽象類都是多態。假設我要拿遙控器打開電器,接口和抽象類多態的側重點不同。接口的側重點在遙控器,多態的側重點在電器。
通過上面的實例,我們知道了接口和多態關系微妙,接口可以看作是多態,而多態的實現方式又需要借助接口。想要徹底弄清楚多態和接口關系,我們在觀看完本站的Java接口教程之后,或許會有更深的感悟。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習