介面的使用(Java)
介面是一個特殊的類,主要由全域性變數和公共的抽象方法組成,介面可以說是百分之百的抽象類,也就是說,介面中的方法全都是抽象方法(Java8以前),介面通常用來定義一組通用的元件,或者功能模組。
一,介面的基本使用
不同於普通的類,類的關鍵字是class,介面的是interface
public interface 介面名{
}
和定義類的區別在於,將class關鍵字換成了interface
1 介面中的成員屬性和方法
介面中也有成員屬性和方法
所有的成員屬性都是 public static final (公共的靜態常量)型別
所有的方法都是:public abstract (公共的抽象方法)
public interface Test1 {
int a = 0;
void hello();
}
可以省略不寫前面的修飾詞,介面會預設。
我們去可以測試一下
public class Test {
public static void main(String[] args) {
Test1 test1 = new Test1() {
@Override
public void hello() {
System.out.println("hello");
}
};
test1.hello();
System.out.println(Test1.a);
}
}
輸出結果:
可以看到a可以直接被類名引用出來,表示為公開的靜態變數
如果我們嘗試修改a的值
此時會報錯,說明a是被final修飾的值,無法被修改。
2 介面的基本使用
我們需要使用implements關鍵詞去實現介面。
public class getTest1 implements Test1 {
@Override
public void hello() {
System.out.println("我是getTest1中的hello方法");
}
}
由於介面中的方法是抽象方法,所以在介面實現類中,必須實現介面中規定的方法。
測試結果如下:
一個類可以實現多個介面,但必須實現所有介面中的方法
二,函式式介面
就是介面中只有一個抽象方法的介面,稱為函式式介面,需要在介面的上方加上@FunctionalInterface 註解
只要介面只定義了一個抽象方法,那它就是一個函式式介面,還有在上述Java Api中都有個@FunctionalInterface註解,這表示著該介面會設計成一個函式式介面,不符合規範的話,就會編譯報錯。
三,介面間的相互繼承
讓Test2介面繼承Test1介面
public interface Test2 extends Test1{
void hello2();
}
在介面實現類中只實現Test2介面
public class GetTest1 implements Test2 {
//Test1介面中的方法
@Override
public void hello() {
System.out.println("我是Test1中的hello方法");
}
//Test2介面中的方法
@Override
public void hello2() {
System.out.println("我是Test2中的hello2方法");
}
}
例項(上述的具體實現,可以不用看)
原始的手機,可以發簡訊,通電話。隨著發展,手機增加了音訊、視訊播放、拍照、上網功能。按照作業3的思路和下面的類圖進行程式設計:首先,編寫類及介面,參照以下類的結構圖;其次,編寫測試類,讓普通手機播放音訊、發資訊和通電話,讓智慧手機上網、播放視訊、照相、發彩信和視訊通電話。
TheakePictures介面:
public interface TheakePictures {
public void takePictare();
}
PlayWirIng介面:
public interface PlayWirIng {
public void play(String incontent);
}
NetWork介面:
public interface NetWork {
public void networkConn();
}
Handset抽象類:
public abstract class Handset {
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 void sendInfo(){
System.out.println("這是一款型號為"+getBrand()+"的"+getType()+"手機:");
}
public abstract void call();
public abstract void info();
}
AptitudeHand實現類:
public class AptitudeHandst extends Handset implements TheakePictures, NetWork,PlayWirIng {
@Override
public void call() {
System.out.println("開始視訊通話......");
}
@Override
public void info() {
System.out.println("傳送帶圖片與文字的訊息");
}
@Override
public void networkConn() {
System.out.println("已開啟行動網路");
}
@Override
public void takePictare() {
System.out.println("咔嚓......拍照成功");
}
@Override
public void play(String incontent) {
System.out.println("開始播放視訊《"+incontent+"》");
}
}
CommonHandset實現類:
public class CommonHandset extends Handset implements PlayWirIng {
@Override
public void call() {
System.out.println("傳送語音通話.........");
}
@Override
public void info() {
System.out.println("傳送文字訊息..........");
}
@Override
public void play(String incontent) {
System.out.println("開發播放音樂《"+incontent+"》.....");
}
}
測試類:
public class TestIphon {
public static void main(String[] args) {
Handset handset = new CommonHandset();
CommonHandset comm = (CommonHandset)handset;
comm.setBrand("G502c");
comm.setType("索尼愛立信");
comm.sendInfo();
comm.play("熱血");
comm.info();
comm.call();
handset = new AptitudeHandst();
AptitudeHandst apt = (AptitudeHandst)handset;
apt.setBrand("HTC");
apt.setType("I9100");
apt.sendInfo();
apt.networkConn();
apt.play("小時代");
apt.takePictare();
apt.info();
apt.call();
}
}
輸出結果:
相關文章
- 字串排序 (java comparator介面的使用)字串排序Java
- Java集合框架的概念以及常用介面的介紹Java框架
- Java Selenide 介紹&使用JavaIDE
- java8介面的靜態方法和預設方法Java
- java ShutdownHook介紹與使用JavaHook
- java .stream(). 使用介紹 Streams APIJavaAPI
- java.util.Arrays 快速使用介紹Java
- Java中使用JMX除錯簡介Java除錯
- phpStudy啟動介面的功能簡介PHP
- Java中抽象類和介面的介紹及二者間的區別Java抽象
- JSON簡介(java中的json庫使用)JSONJava
- 呼叫java介面的方式有哪些?Java
- Java基準效能測試--JMH使用介紹Java
- Java IO流字元流簡介及基本使用Java字元
- dble簡介及相對於MyCAT的優勢方面的介紹
- Hanlp在java中文分詞中的使用介紹HanLPJava中文分詞
- Ibert眼圖測試與高速介面的介質
- 一份儘可能全面的Go channel介紹Go
- JAVA簡介Java
- Java介紹Java
- 類的繼承,介面的使用繼承
- WPF 之 INotifyPropertyChanged 介面的使用 (一)
- SATA介面和M.2介面的固態硬碟哪個好?SSD硬碟SATA介面和M.2介面的區別硬碟
- Java中抽象類和介面的區別Java抽象
- Java GeoTools構建地理點線面的方法Java
- Java中抽象類與介面的區別Java抽象
- 使用Java和Dapr構建雲原生應用簡介Java
- USB3.0介面的工業相機應用
- NLPIR在文字資訊提取方面的優勢介紹
- 最全面的CQRS和事件溯源介紹 - Software House ASC事件
- Java 11簡介Java
- java JNI簡介Java
- Java 反射簡介Java反射
- Java scirpt簡介Java
- java agent簡介Java
- Jira使用簡介 HP ALM使用簡介
- 最全面的Navigation的使用指南Navigation
- JAVA物件導向高階二:JDK8開始,介面中新增的三種方法 介面的多繼承,使用介面的注意事項Java物件JDK繼承