成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

簡單談一談Java內(nèi)部類的使用原因

enda / 395人閱讀

摘要:密碼備份文件我們來看其測試運行結(jié)果密碼備份文件這樣做的好處之一就是,我們可以在這個方法中增加一些判斷語句,起到數(shù)據(jù)安全的作用。

使用內(nèi)部類的原因
學(xué)習(xí)總得知其所以然,前面的一篇文章中我有提到過關(guān)于java內(nèi)部類的幾種用法以及一些示例,但是不明白內(nèi)部類具體可以做什么,顯然學(xué)習(xí)起來很渺茫,今天的文章簡單說一說使用內(nèi)部類的幾個原因,為了可讀性更好,示例都極大的簡化了,希望能給初學(xué)者一些幫助
(一) 封裝性

作為一個類的編寫者,我們很顯然需要對這個類的使用訪問者的訪問權(quán)限做出一定的限制,我們需要將一些我們不愿意讓別人看到的操作隱藏起來,

如果我們的內(nèi)部類不想輕易被任何人訪問,可以選擇使用private修飾內(nèi)部類,這樣我們就無法通過創(chuàng)建對象的方法來訪問,想要訪問只需要在外部類中定義一個public修飾的方法,間接調(diào)用。

public interface Demo {
    void show();
}
class Outer {
    private class test implements Demo {
        public void show() {
            System.out.println("密碼備份文件");
        }
    }
    
    public Demo getInner() {
        return new test();
    }
    
}

我們來看其測試

    public static void main(String[] args) {
        Outer outer = new Outer();
        Demo d = outer.getInner();
        i.show();
    }

//運行結(jié)果
密碼備份文件

這樣做的好處之一就是,我們可以在這個public方法中增加一些判斷語句,起到數(shù)據(jù)安全的作用。

其次呢,我們的對外可見的只是getInner()這個方法,它返回了一個Demo接口的一個實例,而我們真正的內(nèi)部類的名稱就被隱藏起來了

(二) 實現(xiàn)多繼承 ※

我們之前的學(xué)習(xí)知道,java是不可以實現(xiàn)多繼承的,一次只能繼承一個類,我們學(xué)習(xí)接口的時候,有提到可以用接口來實現(xiàn)多繼承的效果,即一個接口有多個實現(xiàn),但是這里也是有一點弊端的,那就是,一旦實現(xiàn)一個接口就必須實現(xiàn)里面的所有方法,有時候就會出現(xiàn)一些累贅,但是使用內(nèi)部類可以很好的解決這些問題

public class Demo1 {
    public String name() {
        return "BWH_Steven";
    }
}
public class Demo2 {
    public String email() {
        return "[email protected]";
    }
}
public class MyDemo {

    private class test1 extends Demo1 {
        public String name() {
            return super.name();
        }
    }

    private class test2 extends Demo2  {
        public String email() {
            return super.email();
        }
    }

    public String name() {
        return new test1().name();
    }

    public String email() {
        return new test2().email();
    }

    public static void main(String args[]) {
        MyDemo md = new MyDemo();
        System.out.println("我的姓名:" + md.name());
        System.out.println("我的郵箱:" + md.email());
    }
}

我們編寫了兩個待繼承的類Demo1和Demo2,在MyDemo類中書寫了兩個內(nèi)部類,test1和test2 兩者分別繼承了Demo1和Demo2類,這樣MyDemo中就間接的實現(xiàn)了多繼承

(三) 用匿名內(nèi)部類實現(xiàn)回調(diào)功能

我們用通俗講解就是說在Java中,通常就是編寫一個接口,然后你來實現(xiàn)這個接口,然后把這個接口的一個對象作以參數(shù)的形式傳到另一個程序方法中, 然后通過接口調(diào)用你的方法,匿名內(nèi)部類就可以很好的展現(xiàn)了這一種回調(diào)功能

public interface Demo {
    void demoMethod();
}
public class MyDemo{
    public test(Demo demo){
        System.out.println("test method");
    }
    
    public static void main(String[] args) {
        MyDemo md = new MyDemo();
        //這里我們使用匿名內(nèi)部類的方式將接口對象作為參數(shù)傳遞到test方法中去了
        md.test(new Demo){
            public void demoMethod(){
                System.out.println("具體實現(xiàn)接口")
            }
        }
    }
}
(四) 解決繼承及實現(xiàn)接口出現(xiàn)同名方法的問題

編寫一個接口 Demo

public interface Demo {
    void test();
}

編寫一個類 MyDemo

public class MyDemo {

    public void test() {
        System.out.println("父類的test方法");
    }
    
}

編寫一個測試類

public class DemoTest extends MyDemo implements Demo {
    public void test() {
    }
}

這樣的話我就有點懵了,這樣如何區(qū)分這個方法是接口的還是繼承的,所以我們使用內(nèi)部類解決這個問題

public class DemoTest extends MyDemo {


    private class inner implements Demo {
        public void test() {
            System.out.println("接口的test方法");
        }
    }
    
    public Demo getIn() {
        return new inner();
    }
    
    
    public static void main(String[] args) {
        //調(diào)用接口而來的test()方法
        DemoTest dt = new DemoTest();
        Demo d = dt.getIn();
        d.test();
        
        //調(diào)用繼承而來的test()方法
        dt.test();
    }
}

//運行結(jié)果
接口的test方法
父類的test方法
結(jié)尾:

如果內(nèi)容中有什么不足,或者錯誤的地方,歡迎大家給我留言提出意見, 蟹蟹大家 !^_^

如果能幫到你的話,那就來關(guān)注我吧!(系列文章均會在公眾號第一時間更新)

在這里的我們素不相識,卻都在為了自己的夢而努力 ?

一個堅持推送原創(chuàng)Java技術(shù)的公眾號:理想二旬不止

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/76218.html

相關(guān)文章

  • 一談創(chuàng)建React Component的幾種方式

    摘要:用這種方式創(chuàng)建組件時,并沒有對內(nèi)部的函數(shù),進行綁定,所以如果你想讓函數(shù)在回調(diào)中保持正確的,就要手動對需要的函數(shù)進行綁定,如上面的,在構(gòu)造函數(shù)中對進行了綁定。 當(dāng)我們談起React的時候,多半會將注意力集中在組件之上,思考如何將頁面劃分成一個個組件,以及如何編寫可復(fù)用的組件。但對于接觸React不久,還沒有真正用它做一個完整項目的人來說,理解如何創(chuàng)建一個組件也并不那么簡單。在最開始的時候...

    mylxsw 評論0 收藏0
  • 一談原型和原型鏈

    摘要:相關(guān)名詞概念原型的所有對象中都包含了一個內(nèi)部屬性,這個屬性所對應(yīng)的就是該對象的原型的函數(shù)對象,除了原型之外,還預(yù)置了屬性當(dāng)函數(shù)對象作為構(gòu)造函數(shù)創(chuàng)建實例時,該屬性值將被作為實例對象的原型。 1 寫在前面 JavaScript中除了基本類型外的數(shù)據(jù)類型,都是對象。但是由于其沒有 類(class,ES6引入了class,但只是語法糖)的概念,如何將所有對象聯(lián)系起來就成了一個問題,于是就有了原...

    546669204 評論0 收藏0
  • Java開發(fā) 大廠面試整理

    摘要:用戶態(tài)不能干擾內(nèi)核態(tài)所以指令就有兩種特權(quán)指令和非特權(quán)指令不同的狀態(tài)對應(yīng)不同的指令。非特權(quán)指令所有程序均可直接使用。用戶態(tài)常態(tài)目態(tài)執(zhí)行非特權(quán)指令。 這是我今年從三月份開始,主要的大廠面試經(jīng)過,有些企業(yè)面試的還沒來得及整理,可能有些沒有帶答案就發(fā)出來了,還請各位先思考如果是你怎么回答面試官?這篇文章會持續(xù)更新,請各位持續(xù)關(guān)注,希望對你有所幫助! 面試清單 平安產(chǎn)險 飛豬 上汽大通 浩鯨科...

    Scorpion 評論0 收藏0
  • 一談javascript面向?qū)ο?/b>

    摘要:從今天起我們開始討論的面向?qū)ο竺嫦驅(qū)ο蟾拍罾斫饷嫦驅(qū)ο笳Z言有個標(biāo)志它們都具有類的概念,通過類可以創(chuàng)建任意多個具有相同屬性和方法的對象。 從今天起我們開始討論javascript的面向?qū)ο?面向?qū)ο蟾拍罾斫?面向?qū)ο笳Z言有個標(biāo)志=>它們都具有類的概念,通過類可以創(chuàng)建任意多個具有相同屬性和方法的對象。面向?qū)ο笥腥筇匦? 封裝 繼承 多態(tài) 但JS中對象與純面向?qū)ο笳Z言中的對象是不同的 J...

    PiscesYE 評論0 收藏0
  • 一談JVM垃圾回收

    摘要:這個算法看似不錯而且簡單,不過存在這一個致命傷當(dāng)兩個對象互相引用的時候,就永遠不會被回收于是引用計數(shù)算法就永遠回收不了這兩個對象,下面介紹另一種算法。 前言 ? 如果要問Java與其他編程語言最大的不同是什么,我第一個想到的一定就是Java所運行的JVM所自帶的自動垃圾回收機制,以下是我學(xué)習(xí)JVM垃圾回收機制整理的筆記,希望能對讀者有一些幫助。 哪些內(nèi)存需要回收?what? ? ...

    stormzhang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<