接口:
官方的含義是---->java接口是一系列方法的聲明,是一些方法特征的集合
疑問:
那為什么不用抽象類呢?把他們共有的方法集合起來放在一個(gè)抽象類里面,同樣可以調(diào)用哇,但是反過來想一想如果這些方法,不是同一個(gè)類,就比如飛這個(gè)方法,飛機(jī)有飛這個(gè)方法,蚊子有飛這個(gè)方法,如果讓他連同時(shí)繼承擁有飛這個(gè)抽象類里面,是不符合單一職責(zé)原則的,所以我們可以提供一個(gè)飛的接口,飛機(jī),蚊子來實(shí)現(xiàn)這個(gè)接口,那么飛機(jī)和蚊子就擁有飛的能力啦,這是我對(duì)接口的理解
因?yàn)樽罱趯W(xué)習(xí)java 面向?qū)ο笾械慕涌?,就畫?a href="/news/124521.html">思維導(dǎo)圖:
這是我對(duì)接口知識(shí)的基本總結(jié)
舉一個(gè)案例希望大家能理解接口!
現(xiàn)在有一個(gè)需求,有一個(gè)門door類,有一個(gè)防盜門antithedoor類,有一個(gè)鐵門irondoor類,因?yàn)榉辣I門和鐵門都有門的屬性,所以二者
繼承門door類
他們都有一個(gè)功能,就是上鎖與開鎖,還有一個(gè)防盜門獨(dú)有的功能,就是貓眼cateye功能,貓眼功能是防盜門獨(dú)有的方法,所以應(yīng)當(dāng)把
貓眼看成一個(gè)接口,防盜門可以實(shí)現(xiàn)它,這樣我們用代碼怎么來詮釋呢(定義與實(shí)現(xiàn))
父類door
1
2
3
4
5
6
7
8
9
10
11
12
|
public abstract class door { /** * 開門 */ public abstract void open(); /** * 關(guān)門 */ public abstract void close(); } |
接口:只寫應(yīng)該具有的功能
1
2
3
4
5
6
7
8
|
public interface cateye { /** * 在使用接口的所有類中,需要實(shí)現(xiàn)接口中所有的方法 * 他們有這個(gè)功能,但是具體的實(shí)現(xiàn)放是不一樣的,需要實(shí)現(xiàn)他的類在里面重新定義它新的生命,就比如,普通的防盜門里的貓眼就是簡(jiǎn)單的看 * 但是,還有一些貓眼的看有掃描的功能,不同的需求放在不同的類里面來具體的實(shí)現(xiàn) */ void look(); } |
1
2
3
4
5
6
7
8
|
public interface lock { /** * 上鎖 */ void uplock(); void downlock(); } |
防盜門是門door的子類,繼承父類開門關(guān)門的方法,同時(shí)擁有上鎖,與貓眼的功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
public class antithedoor extends door implements lock,cateye{ @override public void look() { system.out.println( "防盜門的貓眼,伸頭瞪眼" ); } @override public void uplock() { // todo 自動(dòng)生成的方法存根 system.out.println( "防盜門開鎖:左轉(zhuǎn)三圈" ); } @override public void downlock() { // todo 自動(dòng)生成的方法存根 system.out.println( "防盜門的關(guān)鎖,右轉(zhuǎn)三圈" ); } @override public void open() { // todo 自動(dòng)生成的方法存根 system.out.println( "防盜門的開門:用頭頂" ); } @override public void close() { // todo 自動(dòng)生成的方法存根 system.out.println( "防盜門的關(guān)門:用腳蹬" ); } } |
相比于防盜門,鐵門只有上鎖的功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
public class irondoor extends door implements lock{ @override public void uplock() { system.out.println( "鐵門的開鎖,右轉(zhuǎn)三圈" ); } @override public void downlock() { system.out.println( "鐵門的上鎖,左轉(zhuǎn)三圈" ); } @override public void open() { system.out.println( "鐵門的開門用腳蹬" ); } @override public void close() { system.out.println( "鐵門的關(guān)門方式,用頭頂" ); } } |
測(cè)試類:
1
2
3
4
5
6
7
8
9
10
|
public class test { public static void main(string[] args) { antithedoor atd = new antithedoor(); atd.uplock(); atd.open(); atd.close(); atd.downlock(); } } |
運(yùn)行結(jié)果:
防盜門開鎖:左轉(zhuǎn)三圈
防盜門的開門:用頭頂
防盜門的關(guān)門:用腳蹬
防盜門的關(guān)鎖,右轉(zhuǎn)三圈
一個(gè)接口只有方法的特征沒有方法的實(shí)現(xiàn),因此這些方法可以在不同的地方被不同的類實(shí)現(xiàn),而這些實(shí)現(xiàn)可以有具體不同的能力.
以上所述是小編給大家介紹的java接口基礎(chǔ)知識(shí)詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)服務(wù)器之家網(wǎng)站的支持!
原文鏈接:https://blog.csdn.net/lin2535290272/article/details/89059968