天天要聞:【學(xué)懂Java】(四)面向?qū)ο缶幊?6

2023-01-24 17:31:51 來(lái)源:51CTO博客

一.接口

java中的繼承關(guān)系是單繼承,如果有多個(gè)父類的時(shí)候,可以考慮使用接口進(jìn)行實(shí)現(xiàn)。接口常常被廣泛的使用。

1.了解

使用interface來(lái)修飾接口中可以包含多個(gè)方法,且方法跟抽象類的抽象方法一致,可以不實(shí)現(xiàn),子類在實(shí)現(xiàn)的時(shí)候必須要實(shí)現(xiàn)代碼邏輯,子類實(shí)現(xiàn)接口使用implements關(guān)鍵字

2.接口特性

接口中的所有方法都是抽象方法,不能包含方法的實(shí)現(xiàn)接口中的所有方法的訪問修飾權(quán)限都是public,不寫不是默認(rèn)訪問權(quán)限,而是public接口不能被實(shí)例化,不能new接口的子類必須要實(shí)現(xiàn)接口中的所有方法,跟抽象類有所不同,抽象類中的抽象方法必須要被實(shí)現(xiàn)實(shí)現(xiàn)類可以實(shí)現(xiàn)多個(gè)接口接口中的變量都是靜態(tài)常量,如果變量沒有使用static修飾,也表示靜態(tài)常量,不使用final,也是靜態(tài)常量抽象類可以實(shí)現(xiàn)接口,并且不實(shí)現(xiàn)接口中的方法,而接口只能繼承接口,不能實(shí)現(xiàn)接口。

3.代碼實(shí)現(xiàn)USB接口

public interface Usb {    public void dataTransfer();    public void play();}
public class UPan implements Usb {    @Override    public void dataTransfer() {        System.out.println("upan可以傳輸數(shù)據(jù)");    }}
public class Mouse implements Usb{    @Override    public void dataTransfer() {        System.out.println("鼠標(biāo)來(lái)點(diǎn)擊屏幕");    }}
public class Test {    public static void main(String[] args) {        Mouse mouse = new Mouse();        mouse.dataTransfer();        UPan up = new UPan();        up.dataTransfer();    }}

4.使用

1.接口代表一種能力,接口中可以定義多個(gè)方法,子類在實(shí)現(xiàn)的時(shí)候,必須要實(shí)現(xiàn)這些方法,將這些方法實(shí)現(xiàn)就代表具備方法的能力。

2.關(guān)心實(shí)現(xiàn)類有何能力,而不關(guān)心實(shí)現(xiàn)細(xì)節(jié)


(資料圖片)

旺財(cái)是一只狗------is-a

旺財(cái)有一個(gè)鼻------has-a

聞氣味---能力

3.接口是一種約定

4.規(guī)則

可以定義一個(gè)新接口,用extends去繼承一個(gè)已有的接口可以定義一個(gè)類,用implements去實(shí)現(xiàn)一個(gè)接口中所有方法。可以定義一個(gè)抽象類,用implements去實(shí)現(xiàn)一個(gè)接口中部分方法。

二.內(nèi)部類

內(nèi)部類(當(dāng)作類中的一個(gè)普通成員變量,只不過此成員變量是class的類型):

一個(gè)java文件中可以包含多個(gè)class,但是只能有一個(gè)public class,如果一個(gè)類定義在另一個(gè)類的內(nèi)部,此時(shí)可以稱之為內(nèi)部類

1.使用

創(chuàng)建內(nèi)部類的時(shí)候,跟之前的方法不一樣,需要在內(nèi)部類的前面添加外部類來(lái)進(jìn)行修飾

??InnerClassDemo.InnerClass inner = new InnerClassDemo().new InnerClass();??

2.特點(diǎn)

內(nèi)部類可以方便的訪問外部類的私有屬性 外部類不能訪問內(nèi)部類的私有屬性,但是如果創(chuàng)建了內(nèi)部類的對(duì)象,此時(shí)可以在外部類中訪問私有屬性 內(nèi)部類中不能定義靜態(tài)屬性 當(dāng)內(nèi)部類和外部類具有相同的私有屬性的時(shí)候,在內(nèi)部類中訪問的時(shí)候,可以直接訪問內(nèi)部類的屬性
public class Outer {    private String name = "zhangsan";    class Inner{        private String name = "lisi";        public void show(){            System.out.println(name);            System.out.println(this.name);            System.out.println(Outer.this.name);        }    }    public static void main(String[] args) {        Outer.Inner inner = new Outer().new Inner();        inner.show();    }}
如果需要訪問外部類的屬性,那么需要添加 外部類類名.this.屬性。
public class InnerClassDemo {    private int id;    private String name;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public void show(){        System.out.println("show");//      System.out.println(age);        InnerClass inner = new InnerClass();        System.out.println(inner.age);//創(chuàng)建了內(nèi)部類的對(duì)象,此時(shí)可以在外部類中訪問私有屬性    }    class InnerClass{        private int age;//      static String name = "zhangsan";        public void test(){            System.out.println("test");            System.out.println(id);            System.out.println(name);        }        class InnerInner{            private int id;            public void print(){                System.out.println("print");            }        }    }    public static void main(String[] args) {        InnerClass innerClass = new InnerClassDemo().new InnerClass();    }}
public class TestInnerClass {    public static void main(String[] args) {//      System.gc();        InnerClassDemo innerClassDemo = new InnerClassDemo();        innerClassDemo.show();        System.out.println(innerClassDemo.getName());        InnerClassDemo.InnerClass inner = new InnerClassDemo().new InnerClass();        inner.test();//      System.out.println(inner.age);        InnerClassDemo.InnerClass.InnerInner innerInner = new InnerClassDemo().new InnerClass().new InnerInner();    }}

3.分類

匿名內(nèi)部類:當(dāng)定義了一個(gè)類,實(shí)現(xiàn)了某個(gè)接口的時(shí)候,在使用過程中只需要使用一次,沒有其他用途其實(shí)考慮到代碼編寫的簡(jiǎn)潔,可以考慮不創(chuàng)建具體的類,而采用new interface(){添加未實(shí)現(xiàn)的方法}就叫做匿名內(nèi)部類
public class NoNameInnerClassDemo {    public static void main(String[] args) {        System.out.println("有一萬(wàn)行代碼");        new Thread(new Runnable() {            @Override            public void run() {            }//看似NEW了一個(gè)接口,實(shí)則是類里的實(shí)現(xiàn)方法        });        System.out.println("有一萬(wàn)行代碼");    }}class Runner implements Runnable{    @Override    public void run() {    }}
靜態(tài)內(nèi)部類:在內(nèi)部類中可以定義靜態(tài)內(nèi)部類,使用static關(guān)鍵字進(jìn)行修飾,使用規(guī)則外部類.內(nèi)部類 類的引用名稱 = new 外部類.內(nèi)部類()
public class StaticClass {    private int id;    public void test(){        System.out.println("test");    }    static class InnerClass{        private String name;        public void show(){            System.out.println("show");        }    }    public static void main(String[] args) {        InnerClass innerClass = new StaticClass.InnerClass();//靜態(tài)類通過類名調(diào)用,無(wú)()//      InnerClass innerClass = new StaticClass().new InnerClass();//內(nèi)部類看作外部類的一個(gè)對(duì)象,有()    }}
方法內(nèi)部類:在外部類的方法中也可以定義類,此時(shí)叫做方法內(nèi)部類使用的時(shí)候需要注意,只能在方法中創(chuàng)建對(duì)象,因?yàn)榇薱lass的作用域就是當(dāng)前方法方法內(nèi)部類不能在外部類的方法以外的地方使用,所以方法內(nèi)部類丌能使用訪問控制符和static修飾符
public class MethodInnerClass {    public void show(int number){        System.out.println("show");        class InnerClass{            private String name;            public void test(int a){                System.out.println("test");                System.out.println(a);                System.out.println(number);            }        }        new InnerClass().test(888);    }    public static void main(String[] args) {        MethodInnerClass  methodInnerClass = new MethodInnerClass();        methodInnerClass.show(666);    }}

標(biāo)簽: 方法內(nèi)部類 抽象方法 匿名內(nèi)部類

上一篇:天天速看:【學(xué)懂Java】(五)異常處理
下一篇:配置本地yum源及配置圖形化界面