java 介面,介面的特性,介面實現多型,面向介面程式設計
package cn.zy.cellphone;/**介面是一種引用資料型別。使用interface宣告介面,形式 * 形式:public interface 介面名稱{} * 介面不能擁有構造方法,不能用於建立物件 *介面可以多繼承。一個介面可以繼承多個其他介面 *列如:public interface Broadcast extends Network,Picture{} *Broadcast介面就具備了A、B介面中定義的抽象方法。 */public interface Broadcast { /**介面中可以宣告屬性。介面中定義的所有變數都是static final型別的。 * public static final String version = "1.0"; public int count = 10; // 預設是static final型別 一般很少在介面中宣告屬性。 */
package cn.zy.cellphone;public interface Picture {public void picture();//照相}
package cn.zy.cellphone;public interface Network {public void network();//網路}
package cn.zy.cellphone;/**一個類只能繼承一個父類,同時實現多個介面。繼承在前,實現在後。 * public class Photo2 extends Photo implements Network,Picture,Broadcast {} * 實現類實現介面,必須實現介面中定義的抽象方法。 *方法即行為,表示一種功能,介面定義了一套功能,實現類必須實現這些功能 –> 實現類的能力得到擴充。 *///實現類(子類)public class Photo2 extends Photo implements Network,Picture,Broadcast { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public Photo2(String brand, String type, String name) { super(brand, type); this.setName (name); } /**介面中定義的一些系列方法表示的是一種種的能力。介面讓實現類實現這些能力,實現類的能力得到擴充和升級。 實現類根據自身特性實現介面中定義的方法。 * 特殊情況:如果一個抽象父類定義了和介面同名的抽象方法,實現類實現的是抽象父類的抽象方法。 */ public void broadcast() { System.out.println(this.getName()+"的手機可以播放"); } public void picture() { System.out.println(this.getName()+super.getBrand()+super.getType()+"的手機可以照相"); } public void network() { System.out.println(this.getName()+super.getBrand()+super.getType()+"的手機可以播放上網"); } /**實現類(子類)Photo2 手機原本只有下面幾個功能,透過介面增加了上面幾個功能 * 實現類實現介面,必須實現介面中定義的抽象方法。 *方法即行為,表示一種功能,介面定義了一套功能,實現類必須實現這些功能 –> 實現類的能力得到擴充。 */ public void sendInfo() { System.out.println(super.getBrand()+super.getType()+"的手機發資訊"); } public void call() { System.out.println(super.getBrand()+super.getType()+"的手機可以打電話"); } public void info() { System.out.println(super.getBrand()+super.getType()+"的手機可以發簡訊"); } }
package
cn.zy.cellphone;
//
實現類(子類)
public
class
Photo1
extends
Photo
implements
Broadcast {
private
String name;
public
String
getName
() {
return
name;
}
public
void
setName
(String name) {
this.name =
name;
}
public
Photo1
() {
super
();
}
public
Photo1
(String brand, String type,String name) {
super
(brand,type);
this
.setName(name);
}
public
void
broadcast
() {
System.out.println(
this.getName()+
"的手機可以播放"
);
}
public
void
sendInfo
(){
System.out.println(
super.getBrand()+
super.getType()+
"的手機發資訊"
);
}
public
void
call
(){
System.out.println(
super.getBrand()+
super.getType()+
"的手機可以打電話"
);
}
public
void
info
(){
System.out.println(
super.getBrand()+
super.getType()+
"的手機可以發簡訊"
);
}
}
package cn.zy.cellphone;//父類public abstract class Photo { private String brand; private String type; public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public String getType() { return type; } public void setType(String type) { this.type = type; } public Photo() { super(); } public Photo(String brand, String type) { super(); this.brand = brand; this.type = type; } public abstract void sendInfo(); public abstract void call(); public abstract void info(); }
package
cn.zy.cellphone;
//
執行類
public
class
Test {
public
static
void
main
(String[] args) {
//
同一引用型別
Broadcast broadcast1=
new Photo1(
"諾基亞",
"a01",
"張三"
);
broadcast1.broadcast();
Photo photo=
new Photo1(
"諾基亞",
"a01",
"張三"
);
photo.sendInfo();
photo.call();
photo.info();
//
同一引用型別
Broadcast broadcast2=
new Photo1(
"蘋果X",
"11S",
"李四"
);
broadcast2.broadcast();
//
例項不同, 對同一方法的執行結果不同
Picture picture1=
new Photo2(
"蘋果X",
"11S",
"李四"
);
picture1.picture();
Network network1=
new Photo2(
"蘋果X",
"11S",
"李四"
);
network1.network();
//
多型
Photo photo1=
new Photo1(
"蘋果X",
"11S",
"李四"
);
photo1.sendInfo();
photo1.call();
photo1.info();
/**
* 介面實現多型: 介面型別 引用 實現類物件
繼 承實現多型: 父類型別 引用 子類物件
介面定義的方法被實現類實現,透過介面引用實現類時,呼叫介面中的方法時,執行的是實現類實現的方法。
實現類物件具備介面中定義的能力 是一種has a 關係
子類物件是一種父類型別 是一種is a 關係
現在的Photo1同Photo2既是實現類也是子類
*/
}
}
面向 介面程式設計
介面 表示一種 約定 ( 協議 ), 約定 ( 規範 ) 了 實現類應該具備 (has a) 的 能力。
理解:
=> 實現 類必須實現介面中所有的方法,所以介面規範了實現類的行為
=> 介面 約定了實現類應該具備的行為。
面向 介面程式設計
所謂 面向介面程式設計,在 程式設計時,只關心 實現類具備 什麼能力,而不關心實現類如何實現這個能力。面向 介面程式設計時,面向介面的約定而不考慮介面的具體實現。
也就是 說,面向介面程式設計時,介面的定義方只關係實現類是否具備介面 所定義的能力,而實現類如何被的該能力介面定義方 一點都不關心
//介面實現多型 電腦類(透過介面把3種零件組成電腦,而且零件隨時可以更換)(cpu介面 4Hz 5Hz 。。。。(隨時更換大小不同的cpu) )
(硬碟介面 3000GB 4000Gb(隨時更換大小不同的硬碟))
(記憶體介面 30GB 40Gb(隨時更換大小不同的記憶體))
package cn.computer;//電腦public class Computer { private Cpu cpu; // 預留cpu介面 private Caliche caliche; // 預留硬碟介面 private InternalStroage internalStroage; //預留記憶體介面public Cpu getCpu() { return cpu; }public void setCpu(Cpu cpu) { this.cpu = cpu; }public Caliche getCaliche() { return caliche; }public void setCaliche(Caliche caliche) { this.caliche = caliche; }public InternalStroage getInternalStroage() { return internalStroage; }public void setInternalStroage(InternalStroage internalStroage) { this.internalStroage = internalStroage; }public Computer() { super(); }public Computer(Cpu cpu, Caliche caliche, InternalStroage internalStroage) { super(); this.cpu = cpu; this.caliche = caliche; this.internalStroage = internalStroage; } //把各個部件透過介面組裝成一個完整的電腦public void print(String name) { System.out.println(name+"計算機"); System.out.println("cpu:"+getCpu().Hz()); System.out.println("硬碟容量:"+getCaliche().big2()); System.out.println("記憶體容量:"+this.getInternalStroage().big()); } }
package cn.computer;//cpu介面public interface Cpu { public String Hz(); //這是介面實現多型的形式: public 你要返回的變數型別 方法名() }
package
cn.computer;
//
實現類
public
class
Realize1
implements
Cpu{
public
String
Hz
(){
//
public 你要返回的變數型別 方法名()
return
"3.8GHz";
//
返回值
}
}
package cn.computer;//記憶體介面public interface InternalStroage { public String big(); }
package
cn.computer;
//
實現類
public
class
Realize2
implements
InternalStroage{
public
String
big
(){
return
"4GB"
;
}
}
package cn.computer;//硬碟介面public interface Caliche { public String big2(); }
package
cn.computer;
//
實現類
public
class
Realize2
implements
InternalStroage{
public
String
big
(){
return
"4GB"
;
}
}
package
cn.computer;
public
class
Test {
public
static
void
main
(String[] args) {
Cpu cpu=
new Realize1();
//
把一種3.8Hz的cpu賦予給cpu介面
Caliche caliche=
new Realize3();
//
把3000GB的硬碟賦予給硬碟介面
InternalStroage internalStroage=
new Realize2();
//
把4GB的記憶體賦予給記憶體介面
Computer computer=
new Computer(cpu,caliche,internalStroage);
//
把cpu,硬碟,記憶體給電腦類組合(地址)
computer.print(
"華碩");
//
最後得到了完整的電腦
}
}
1.1.1.1 抽象 類和介面的異同比較
- 抽象類和介面都是引用資料型別,他們都不能建立物件。
- 他們都可以定義抽象方法,都可以實現多型。但是抽象類可以定義非抽象方法,而介面中定義的都是抽象方法。
- 抽象類和介面都具有傳遞性。抽象類是單根性(單繼承),而介面是多繼承。
- 在概念上,都可以重寫抽象方法。子類重寫抽象類,實現類實現介面
- 抽象類和子類解決的是模組內的問題(程式碼重用 , 重寫 , 多型)而介面解決的是模組間的問題 => 高內聚,低耦合。介面可以用 解耦模組。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026910/viewspace-2946577/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 面向介面的程式設計+MVC程式設計MVC
- [MAUI程式設計]介面多型與實現UI程式設計多型
- 面向介面程式設計程式設計
- go 模仿JAVA,面向介面/鏈式程式設計GoJava程式設計
- iOS VIPER架構實踐(三):面向介面的路由設計iOS架構路由
- 面向介面程式設計實踐之aspnetcoreapi的抽象程式設計NetCoreAPI抽象
- Java介面程式設計實戰(一)——簡易QQ登入介面Java程式設計
- 介面的使用(Java)Java
- 介面的定義和實現
- JAVA 將介面的引用指向實現類的物件Java物件
- java 一個類實現兩個介面的案例Java
- 讓介面傳遞故事:遊戲介面的敘事設計遊戲
- Java 介面實現多型 -- 膝上型電腦綜合例項Java多型
- java8介面的靜態方法和預設方法Java
- SATA介面和M.2介面的固態硬碟哪個好?SSD硬碟SATA介面和M.2介面的區別硬碟
- 一篇帶你入門面向介面程式設計程式設計
- Java8 新特性,打破你對介面的認知Java
- Java集合框架的概念以及常用介面的介紹Java框架
- Java 併發程式設計之 Condition 介面Java程式設計
- mybatis設計大介面的坑以及做法MyBatis
- Java 8 介面裡的預設方法特性Java
- Java抽象類、繼承及多型和介面卡的實現Java抽象繼承多型
- JAVA基礎之5-函式式介面的實現Java函式
- HMI人機介面相關介紹及人機介面設計
- 基於Java的Socket類Tcp網路程式設計實現實時聊天互動程式(一):QQ聊天介面的搭建JavaTCP程式設計
- phpStudy啟動介面的功能簡介PHP
- 字串排序 (java comparator介面的使用)字串排序Java
- 呼叫java介面的方式有哪些?Java
- 多執行緒通訊軟體——登入介面的實現執行緒
- (03)Flink 程式設計介面程式設計
- 好程式設計師Java教程分享List介面程式設計師Java
- RPC介面和http介面的區別RPCHTTP
- 淺談服務介面的高可用設計
- postman實現介面的自動化測試Postman
- JAVA 兩個類同時實現同一個介面的方法Java
- JAVA物件導向高階二:JDK8開始,介面中新增的三種方法 介面的多繼承,使用介面的注意事項Java物件JDK繼承
- Mybatis之介面程式設計--JAVA動態代理的最佳展現MyBatis程式設計Java
- java實現zabbix介面開發Java