Java接口繼承和使用接口操作示例
本文實例講述了Java接口繼承和使用接口操作。分享給大家供大家參考,具體如下:
一 接口的繼承
1 點睛
接口支持多繼承,一個接口可以有多個父接口,子接口擴展某個父接口,將會獲得父接口里定義的所有抽象方法、常量。
一個接口繼承多個父接口時,多個父接口排在extends關(guān)鍵字之后。
2 代碼
interface interfaceA
{
int PROP_A = 5;
void testA();
}
interface interfaceB
{
int PROP_B = 6;
void testB();
}
interface interfaceC extends interfaceA, interfaceB
{
int PROP_C = 7;
void testC();
}
public class InterfaceExtendsTest
{
public static void main(String[] args)
{
System.out.println(interfaceC.PROP_A);
System.out.println(interfaceC.PROP_B);
System.out.println(interfaceC.PROP_C);
}
}
3 運行
5
6
7
4 說明
interfaceC接口繼承了 interfaceA和 interfaceB,所以 interfaceC中獲得了它們的常量,因此在main()方法中看到通過 interfaceC來訪問PROP_A、PROP_B、PROP_C常量。
二 使用接口
1 點睛
接口不能用于創(chuàng)建實例,但接口可以用于聲明引用類型變量。但這個引用類型的變量必須引用到其實現(xiàn)類的對象。接口的主要用途就是被實現(xiàn)類實現(xiàn)。接口主要有如下用途。
- 定義變量,也可用于進行強制類型轉(zhuǎn)換。
- 調(diào)用接口中定義的常量。
- 被其他類實現(xiàn)。
一個類可以實現(xiàn)一個或多個接口,繼承使用extends關(guān)鍵字,實現(xiàn)則使用implements關(guān)鍵字。一個類可以實現(xiàn)多個接口,這是Java為單繼承靈活性不足所做的補充。
一個類實現(xiàn)一個或多個接口之后,這個類必須完全實現(xiàn)這些接口里所定義的全部抽象方法(也就是重寫這些抽象方法);否則,該類將保留從父接口那里繼承到的抽象方法,該類也必須定義成抽象類。
2 代碼
interface Output
{
// 接口里定義的成員變量只能是常量
int MAX_CACHE_LINE = 50;
// 接口里定義的普通方法只能是public的抽象方法
void out();
void getData( String msg );
// 接口中定義默認方法,需要使用default修飾
default void print( String... msgs )
{
for (String msg : msgs)
{
System.out.println(msg);
}
}
// 接口中定義默認方法,需要使用default修飾
default void test()
{
System.out.println("默認的test()方法");
}
// 接口中定義類方法、需要使用static修飾
static String staticTest()
{
return "Class method";
}
}
// 定義一個Product接口
interface Product
{
int getProduceTime();
}
// 讓Printer類實現(xiàn)Output和Product接口
public class Printer implements Output , Product
{
private String[] printData
= new String[MAX_CACHE_LINE];
// 用以記錄當前需打印的作業(yè)數(shù)
private int dataNum = 0;
public void out()
{
// 只要還有作業(yè),繼續(xù)打印
while(dataNum > 0)
{
System.out.println("打印機打?。? + printData[0]);
// 把作業(yè)隊列整體前移一位,并將剩下的作業(yè)數(shù)減1
System.arraycopy(printData , 1
, printData, 0, --dataNum);
}
}
public void getData(String msg)
{
if (dataNum >= MAX_CACHE_LINE)
{
System.out.println("輸出隊列已滿,添加失敗");
}
else
{
// 把打印數(shù)據(jù)添加到隊列里,已保存數(shù)據(jù)的數(shù)量加1。
printData[dataNum++] = msg;
}
}
public int getProduceTime()
{
return 45;
}
public static void main(String[] args)
{
// 創(chuàng)建一個Printer對象,當成Output使用
Output o = new Printer();
o.getData("輕量級Java EE企業(yè)應(yīng)用實戰(zhàn)");
o.getData("瘋狂Java講義");
o.out();
o.getData("瘋狂Android講義");
o.getData("瘋狂Ajax講義");
o.out();
// 調(diào)用Output接口中定義的默認方法
o.print("孫悟空" , "豬八戒" , "白骨精");
o.test();
// 創(chuàng)建一個Printer對象,當成Product使用
Product p = new Printer();
System.out.println(p.getProduceTime());
// 所有接口類型的引用變量都可直接賦給Object類型的變量
Object obj = p;
}
}
3 運行
打印機打印:輕量級Java EE企業(yè)應(yīng)用實戰(zhàn)
打印機打?。函偪馢ava講義
打印機打?。函偪馎ndroid講義
打印機打印:瘋狂Ajax講義
孫悟空
豬八戒
白骨精
默認的test()方法
45
4 說明
Printer 實現(xiàn)了 Output 接口和 Product接口,因此Pinter對象即可以直接賦給Output變量,也可直接賦給Product變量。仿佛Printer類既是Output類的子類,也是Product類的子類,這就是Java提供的模擬多繼承。
Printer實現(xiàn)了Output接口,即可獲取Output接口中定義的print()方法和test()兩個默認方法,因此Printer實例可以直接調(diào)用這兩個默認方法。
接口不能顯示繼承任何類,但所有接口類型的引用變量都可以直接賦給Object類型的引用變量。
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計入門與進階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
Java如何實現(xiàn)N叉樹數(shù)據(jù)結(jié)構(gòu)
這篇文章主要介紹了Java如何實現(xiàn)N叉樹數(shù)據(jù)結(jié)構(gòu)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
Spring Boot框架中的@Conditional注解示例詳解
這篇文章主要介紹了Spring Boot框架中的@Conditional系列注解,@ConditionalOnProperty注解的作用是解析application.yml/application.properties 里的配置生成條件來生效,也是與@Configuration注解一起使用,本文通過示例代碼給大家介紹的非常詳細,需要的朋友一起看看吧2022-09-09
MySQL數(shù)據(jù)文件直接通過拷貝備份與恢復的操作方法
這篇文章主要介紹了MySQL數(shù)據(jù)文件直接通過拷貝備份與恢復的操作方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09
淺析Java數(shù)據(jù)庫操作工具包jOOQ的使用
jOOQ?是一個輕量級的?Java?ORM(對象關(guān)系映射)框架,可用來構(gòu)建復雜的?SQL?查詢,這篇文章主要來和大家介紹一下jOOQ的使用,需要的可以參考下2024-04-04
如何在mybatis中向BLOB字段批量插入數(shù)據(jù)
這篇文章主要介紹了如何在mybatis中向BLOB字段批量插入數(shù)據(jù)的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2020-10-10

