深入理解Java中的接口
一. 為什么要使用接口
假如有一個(gè)需求:要求實(shí)現(xiàn)防盜門(mén)的功能。門(mén)有"開(kāi)"和"關(guān)"的功能,鎖有"上鎖"和"開(kāi)鎖"的功能。
分析:首先防盜門(mén)是一個(gè)門(mén),門(mén)有開(kāi)門(mén)和關(guān)門(mén)的功能,還有一把鎖,鎖有開(kāi)鎖和上鎖,按照面向?qū)ο蟮木幊痰乃枷耄覀儠?huì)將門(mén)和鎖都作為一個(gè)類(lèi)而單獨(dú)存在,但是,不能讓防盜門(mén)繼承自門(mén)的同時(shí)又繼承自鎖,防盜門(mén)不是鎖,不符合繼承中is a的關(guān)系,在java中支持單繼承。那么我們?nèi)绾蝸?lái)解決這一問(wèn)題,這時(shí)就要用到接口。
二. 什么是接口
在軟件中接口是一種規(guī)范和標(biāo)準(zhǔn),他們可以約束類(lèi)的行為,是一些方法特征的集合,但是沒(méi)有方法的實(shí)現(xiàn),接口其實(shí)上也可以看做是一個(gè)特殊的抽象類(lèi),但是采用和抽象類(lèi)完全不同的方法來(lái)表示,兩者的設(shè)計(jì)理念也是不同的,抽象類(lèi)有利于代碼復(fù)用,接口利于代碼的擴(kuò)展和維護(hù)。
三. 抽象類(lèi)和接口的區(qū)別:
01 抽象類(lèi)可以提供成員方法的實(shí)現(xiàn)細(xì)節(jié),而接口中只能存在public abstract 方法;
02.抽象類(lèi)中的成員變量可以是各種類(lèi)型的,而接口中的成員變量只能是public static final類(lèi)型的;
03.接口中不能含有靜態(tài)代碼塊以及靜態(tài)方法,而抽象類(lèi)可以有靜態(tài)代碼塊和靜態(tài)方法;
04.一個(gè)類(lèi)只能繼承一個(gè)抽象類(lèi),而一個(gè)類(lèi)卻可以實(shí)現(xiàn)多個(gè)接口。
四. 如何定義接口
首先先來(lái)看一下語(yǔ)法:
[修飾符] interface 接口名 extends 父接口1,父接口2,...
{
//常量定義
//方法定義
}
在一個(gè)類(lèi)中實(shí)現(xiàn)接口語(yǔ)法:
class 類(lèi)名 父類(lèi)名 implements 接口1,接口2,.....
{
//類(lèi)成員
}
五. 定義接口注意點(diǎn)
01、 接口的命名規(guī)則與類(lèi)相同,如果修飾符是public ,則該接口在整個(gè)項(xiàng)目中可見(jiàn);如果省略修飾符,則該接口只在當(dāng)前包中可見(jiàn)。
02、接口中可以定義常量,不能定義變量,如果你在接口中定義屬性,那么通過(guò)反編譯可以看見(jiàn)他會(huì)自動(dòng)用public static final 修飾,接口中的屬性都是全局靜態(tài)常量,接口中的常量必須在定義時(shí)指定初始值。
03、接口中所有的方法都是抽象方法,接口中方法都會(huì)自動(dòng)用public abstract 修飾,即接口中只有全局抽象方法。
04、接口不能實(shí)例化,接口中不能有構(gòu)造。
05、接口之間可以通過(guò)extends實(shí)現(xiàn)繼承關(guān)系,一個(gè)接口可以繼承多個(gè)接口,但接口不能繼承類(lèi)。
06、接口的實(shí)現(xiàn)類(lèi)必須實(shí)現(xiàn)接口的全部方法,否則必須定義為抽象類(lèi)。
以上這篇深入理解Java中的接口就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Java接口和抽象類(lèi)用法實(shí)例總結(jié)
- java中set接口使用方法詳解
- java自定義注解接口實(shí)現(xiàn)方案
- java用接口、多態(tài)、繼承、類(lèi)計(jì)算三角形和矩形周長(zhǎng)及面積的方法
- Java8接口的默認(rèn)方法
- Java中的接口和抽象類(lèi)用法實(shí)例詳解
- Java中接口和抽象類(lèi)的區(qū)別與相同之處
- Java多態(tài)和實(shí)現(xiàn)接口的類(lèi)的對(duì)象賦值給接口引用的方法(推薦)
- Java基礎(chǔ)教程之實(shí)現(xiàn)接口
- Java接口的簡(jiǎn)單定義與實(shí)現(xiàn)方法示例
相關(guān)文章
idea install 時(shí)提示jdk的某個(gè)jar包的包不存在的問(wèn)題
這篇文章主要介紹了idea install 時(shí)提示jdk的某個(gè)jar包的包不存在的問(wèn)題,本文給大家分享解決方法,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09IDEA配置tomcat的方法、IDEA配置tomcat運(yùn)行web項(xiàng)目詳解
這篇文章主要介紹了IDEA配置tomcat的方法、IDEA配置tomcat運(yùn)行web項(xiàng)目詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Jdk11使用HttpClient提交Http2請(qǐng)求的實(shí)現(xiàn)方法
這篇文章主要介紹了Jdk11使用HttpClient提交Http2請(qǐng)求的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08Springboot集成Elasticsearch的步驟與相關(guān)功能
ElasticSearch是開(kāi)源搜索平臺(tái)領(lǐng)域的一個(gè)新成員,?ElasticSearch是一個(gè)基于Lucene構(gòu)建的開(kāi)源,分布式,RESTful搜索引擎,這篇文章主要給大家介紹了關(guān)于Springboot集成Elasticsearch的相關(guān)資料,需要的朋友可以參考下2021-12-12Java實(shí)現(xiàn)快速排序和堆排序的示例代碼
這篇文章主要為大家詳細(xì)介紹了快速排序和堆排序的多種語(yǔ)言的實(shí)現(xiàn)(JavaScript、Python、Go語(yǔ)言、Java、C++),感興趣的小伙伴可以了解一下2022-12-12SpringMVC實(shí)現(xiàn)文件的上傳和下載實(shí)例代碼
本篇文章主要介紹了SpringMVC實(shí)現(xiàn)文件的上傳和下載實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05