无法创建接口的实例_什么是接口?
接口
接口概述
接口,是java語言中一種類型,是方法的集合,如果說 類的內(nèi)部封裝了成員變量,構(gòu)造 方法,和成員方法,那么接口的內(nèi)部主要就是封裝了方法,包含抽象方法,默認(rèn)方法和靜態(tài)方法
接口是對(duì)功能的擴(kuò)展們也是聲明規(guī)則的一種方式 狹義的角度來看,接口指的就是java的關(guān)鍵字,interfaceclass 類名{} interface 接口名{}接口的出現(xiàn),打破了java中只支持單繼承的[局限性] 接口和類之間的關(guān)系,實(shí)現(xiàn)關(guān)系,可以單實(shí)現(xiàn),也可以多實(shí)現(xiàn)問題:生活中的USB接口體現(xiàn)的是什么思想? 功能的[拓展] 1.USB鼠標(biāo) 2.USB鍵盤 3.USB移動(dòng)硬盤
生活中的接口也體現(xiàn)了一種[規(guī)則]的思想 1.電腦廠商設(shè)計(jì)USB接口的時(shí)候是長方形的 2.USB鼠標(biāo)鍵盤硬盤在設(shè)計(jì)USB接口的時(shí)候也是長方形的
開始寫接口
1.接口的定義,他與定義類的方式相似,但是使用interface關(guān)鍵字,他也會(huì)被編譯成class文件 ,但是一定要明確它并不是類,而是另外一種引用數(shù)據(jù)類型
public class 類名.java --> .class public interface 類名.java -->.class引用數(shù)據(jù)類型: 類 , 數(shù)組, 接口2.接口的使用,他不能直接創(chuàng)建對(duì)象,但是可以被實(shí)現(xiàn)(implements,類似于被繼承) ,一個(gè)實(shí)現(xiàn)接口的類(可以看做是接口的子類),需要實(shí)現(xiàn)接口中所有的抽象方法,創(chuàng)建 該類對(duì)象,就可以調(diào)用方法了,否則 必須把它也變成一個(gè)抽象類
定義格式
public interface 接口名稱{//抽象方法//默認(rèn)方法//靜態(tài)方法 }含有抽象方法 : 使用abstract關(guān)鍵字修飾,可以省略,沒有方法體,該方法供子類實(shí)現(xiàn)使用public interface InterFaceName{public abstract void method();}含有默認(rèn)方法和靜態(tài)方法:默認(rèn)方法: 使用default修飾,不可省略,供子類調(diào)用或重寫靜態(tài)方法:使用static修飾,供接口直接使用public interface InterFaceName {public default void method(){//執(zhí)行語句}public static void method() {//執(zhí)行語句}}特點(diǎn): 1.接口不能實(shí)例化 2.接口中定義的方法只能是抽象方法 原因:即使不寫abstract,系統(tǒng)也會(huì)默認(rèn)加上這個(gè)關(guān)鍵字 注意接口與類之間的關(guān)系是實(shí)現(xiàn)關(guān)系,通過implements關(guān)鍵字進(jìn)行實(shí)現(xiàn)
接口的特點(diǎn)
● 定義接口使用的是interface關(guān)鍵字
interface Inter{}● 類和接口之間是實(shí)現(xiàn)關(guān)系,用implements關(guān)鍵字表示
class InterImp implements Inter {}● 接口不能實(shí)例化
如果接口允許實(shí)例化,就可以調(diào)用內(nèi)部的抽象方法,調(diào)用沒有方法體的抽象方法沒有意義● 接口有沒有其他的方式實(shí)例化呢? 1. 直接創(chuàng)建實(shí)現(xiàn)類對(duì)象使用 2.使用多態(tài)的形式創(chuàng)建
Inter i = new InterImp();基本的實(shí)現(xiàn)
類和接口的關(guān)系為實(shí)現(xiàn)關(guān)系,即類實(shí)現(xiàn)接口,該類可以稱為接口的實(shí)現(xiàn)類,也可以稱為接口的 子類.實(shí)現(xiàn)的動(dòng)作類似繼承,格式相仿,只是關(guān)鍵詞不同,實(shí)現(xiàn)使用implements關(guān)鍵字.
非抽象子類實(shí)現(xiàn)接口:
1.必須重寫接口中所有抽象方法 2.繼承了接口的默認(rèn)方法,可以直接調(diào)用,也可以重寫
實(shí)現(xiàn)格式
class 類名 implements 接口名 {//重寫接口中抽象方法[必選]//重寫接口中默認(rèn)方法[可選] }抽象方法的使用
必須全部實(shí)現(xiàn),代碼如下:
定義接口:
public interface LiveAble{//定義抽象方法public abstract void eat(); public abstract void sleep();}定義實(shí)現(xiàn)類:
public class Animal implements LiveAble{@Overridepublic void eat () {System.out.println("吃東西");}@Overridepublic void sleep () {System.out.println("睡覺");} }定義測(cè)試類:
public class InterfaceDemo {public static void main (String []args){//創(chuàng)建子類對(duì)象Animal a = new Animal();//調(diào)用實(shí)現(xiàn)后的方法a.eat();a.sleep();}}//輸出結(jié)果://吃東西, 睡覺默認(rèn)方法的使用
可以繼承,可以重寫,二選一,但是只能通過實(shí)現(xiàn)類的對(duì)象來調(diào)用
繼承默認(rèn)方法,代碼如下
定義接口:
public interface LivaAble{public default void fly (){System.out.println("天上飛");} }定義實(shí)現(xiàn)類:
public class Animal implements LiveAble {// 繼承,什么都不用寫,直接調(diào)用 }定義測(cè)試類:
public class InterFaceDemo{public static void main (String [] args) { //創(chuàng)建子類對(duì)象Animal a = new Animal();//調(diào)用默認(rèn)方法a.fly(); //輸出天上飛} }重寫默認(rèn)方法,代碼如下
定義接口:
public interface LivaAble{public default void fly (){System.out.println("天上飛");} }定義實(shí)現(xiàn)類:
public class Animal implements LiveAble {@Overridepublic void fly() {System.out.println("自由自在的飛");} }定義測(cè)試類:
public class InterFaceDemo{public static void main (String [] args) { //創(chuàng)建子類對(duì)象Animal a = new Animal();//調(diào)用重寫方法a.fly(); //輸出自由自在的飛} }靜態(tài)方法的使用
靜態(tài)與.class文件相關(guān),只能使用接口名調(diào)用,不可以通過實(shí)現(xiàn)類的類名或者實(shí)現(xiàn)類的對(duì)象調(diào)用
代碼如下:
定義接口:
public interface LivaAble{public static void run (){System.out.println("跑起來");} }定義實(shí)現(xiàn)類:
public class Animal implements LiveAble {//無法重寫靜態(tài)方法 }定義測(cè)試類:
public class InterFaceDemo{public static void main (String [] args) { //Animal.run()// [錯(cuò)誤] 無法繼承方法,也無法調(diào)用LiveAble.run();// 輸出跑起來 } }接口的多實(shí)現(xiàn)
對(duì)于接口而言,一個(gè)類是可以實(shí)現(xiàn)多個(gè)接口的,這叫做接口的多實(shí)現(xiàn),并且一個(gè)類只能 繼承一個(gè)父類,同時(shí)實(shí)現(xiàn)多個(gè)接口
實(shí)現(xiàn)格式:
可選操作 class 類名 [extends 父類名 ] implements 接口名1,接口名2,接口名3... { // 重寫接口中抽象方法【必須】 // 重寫接口中默認(rèn)方法【不重名時(shí)可選】 }抽象方法
接口中,有多個(gè)抽象方法時(shí),實(shí)現(xiàn)類必須重寫所有抽象方法,如果抽象方法有重名的 只需要重寫一次,代碼如下:
定義多個(gè)接口:
interface A {public abstract void showA();public abstract void show();}interface B {public abstract void showB();public abstract void show();}定義實(shí)現(xiàn)類:
public class C implements A,B{@Overridepublic void showA() {System.out.println("showA");}@Overridepublic void showB() {System.out.println("showB");}@Overridepublic void show() {System.out.println("show");}}默認(rèn)方法
接口中,有多個(gè)默認(rèn)方法時(shí),實(shí)現(xiàn)類都可繼承使用,如果默認(rèn)方法有重名的, 必須重寫一次 代碼如下:
定義多個(gè)接口:
interface A {public default void methodA(){}public default void method(){}}interface B {public default void methodB(){}public default void method(){}}定義實(shí)現(xiàn)類:
public class C implements A,B{@Overridepublic void method() {System.out.println("method");}}靜態(tài)方法
接口中,存在同名的靜態(tài)方法并不會(huì)沖突,原因是只能通過各自接口名訪問靜態(tài)方法
優(yōu)先級(jí)的問題:
當(dāng)一個(gè)類,即繼承父類,又實(shí)現(xiàn)多個(gè)接口時(shí), 父類中的成員方法與接口中的默認(rèn)方法重名 ,子類就近選擇執(zhí)行父類的成員方法,代碼如下:
定義接口:
interface A {public default void methodA(){System.out.println("AAAAAAAAAAAA");} }定義父類:
class D {public void methodA(){System.out.println("DDDDDDDDDDDD");} }定義子類:
class C extends D implements A {// 未重寫methodA方法}public class Test {public static void main(String[] args) {C c = new C();c.methodA();}}輸出結(jié)果:DDDDDDDDDDDD接口的多繼承
一個(gè)接口能繼承另一個(gè)或者多個(gè)接口, 這和類之間的繼承比較相似,接口的繼承 使用extends關(guān)鍵字, 子接口繼承父接口的方法. 如果父接口中的方法有重名的 .那么子接口需要重寫一次,代碼如下:
定義父類接口:
interface A {public default void method(){System.out.println("AAAAAAAAAAAAAAAAAAA");}}interface B {public default void method(){System.out.println("BBBBBBBBBBBBBBBBBBB");}}定義子接口:
interface D extends A,B{@Overridepublic default void method() {System.out.println("DDDDDDDDDDDDDD");}}子接口重寫默認(rèn)方法時(shí),default關(guān)鍵字可以保留 子類重寫默認(rèn)方法時(shí),default關(guān)鍵字不可以保留其他成員特點(diǎn)
接口中 : 無法定義成員變量,但是可以定義常量,其值不可改變.默認(rèn)使用public static final修飾接口中,沒有構(gòu)造方法,不能創(chuàng)建對(duì)象接口中沒有靜態(tài)代碼塊看一段代碼(擴(kuò)展,規(guī)則)
public class DemoInterface{public static void main(String [] args){岳不群 小岳子 = new 岳不群 ();小岳子.zg();//用錘子}}interface 葵花寶典 {//聲明規(guī)則public abstract void zg();}class 岳不群 implements 葵花寶典{@Overridepublic void zg () {System.out.println("用錘子"); }class 林平之 implements 葵花寶典{@Overridepublic void zg () {System.out.println("用牙簽"); }再來一段代碼
public class DemoInterface{public static void main(String [] args){SmokeStudent ss = new SmokeStudent();ss.study();ss.smoking();}}//定義學(xué)生類 class Student { public void study () {System.out.println("學(xué)生學(xué)習(xí)");}//定義抽煙接口 interface Smoke {//聲明規(guī)則,并不是所有學(xué)生都具備抽煙的功能//抽煙功能就屬于功能的一種[擴(kuò)展].public abstract void smoking();}//接口的出現(xiàn),打破了Java中只支持單繼承的局限性 //在有了親爹的同時(shí),還能有個(gè)干爹 class SmokeStudent extends Student implements Smoke{@Overridepublic void smoking(){System.out.println("有故事的學(xué)生,抽煙"")} }面向接口編程思想(多態(tài)+接口)
MySQL Oracle包的概述和注意事項(xiàng)
包的作用是什么? 如何定義一個(gè)包 如何劃分包?總結(jié):● 包就是文件夾,用來管理類文件的● package 包名;● 包名的定義規(guī)范,一般都是公司的域名倒著寫itheima.comitcast.cncn.itcast.項(xiàng)目名com.itheima.gjpA. 按照功能劃分(很少見)車載系統(tǒng)com.itheima.car.mp3com.itheima.car.video...B. 按照模塊劃分(最常見的)com.itheima.gjp.domain-->(實(shí)體類)javabean類,用于封裝數(shù)據(jù)的類com.itheima.gjp.utils-->工具類(收好了,以后可以說是自己寫的)com.itheima.gjp.view-->視圖層com.itheima.gjp.ctrl-->控制層com.itheima.gjp.services-->業(yè)務(wù)層com.itheima.gjp.dao-->數(shù)據(jù)庫訪問層(DataBase Object Access)...import class package的順序關(guān)系是
package ->import ->classctrl+ shift+o 整理包的快捷鍵導(dǎo)包的格式以及使用
引用不同包下的類文件(導(dǎo)包的方式) 格式: import 包名.類名* 代表通配符 ,(java.util.*) 導(dǎo)入了util包下面所有的類分別導(dǎo)入比較省內(nèi)存
如果自己寫的類,和java的類名想通了 會(huì)優(yōu)先使用我們自己寫的類那如果我們自己寫的類和java一樣了 ,還想使用java寫好的類,怎么辦?需要通過[全類名]方式創(chuàng)建對(duì)象了[全類名]: 包名+類名eg: java.util.Scanner sc = new java.util.Scanner(System.in);
四種權(quán)限修飾符的概述和訪問特點(diǎn)(基本就是private和public)
| |本類|同一個(gè)包下(子類和無關(guān)類)|不同包下(子類)|不同包下(無關(guān)類)|也就是| |---|---|---|---|---|---| |private|?| | | |只能在本類當(dāng)中訪問| |default|?|?| | |(本類),同一個(gè)包下| |protected|?|?|?| | |public|?|?|?|?|權(quán)限最大,不跨項(xiàng)目都可訪問|
總結(jié)
以上是生活随笔為你收集整理的无法创建接口的实例_什么是接口?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑技巧:如何彻底关闭电脑右下角闪烁弹窗
- 下一篇: 百度迁徙 迁入人口和迁徙规模爬虫