摘要:密碼備份文件我們來看其測試運行結(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
摘要:用這種方式創(chuàng)建組件時,并沒有對內(nèi)部的函數(shù),進行綁定,所以如果你想讓函數(shù)在回調(diào)中保持正確的,就要手動對需要的函數(shù)進行綁定,如上面的,在構(gòu)造函數(shù)中對進行了綁定。 當(dāng)我們談起React的時候,多半會將注意力集中在組件之上,思考如何將頁面劃分成一個個組件,以及如何編寫可復(fù)用的組件。但對于接觸React不久,還沒有真正用它做一個完整項目的人來說,理解如何創(chuàng)建一個組件也并不那么簡單。在最開始的時候...
摘要:用戶態(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)險 飛豬 上汽大通 浩鯨科...
摘要:從今天起我們開始討論的面向?qū)ο竺嫦驅(qū)ο蟾拍罾斫饷嫦驅(qū)ο笳Z言有個標(biāo)志它們都具有類的概念,通過類可以創(chuàng)建任意多個具有相同屬性和方法的對象。 從今天起我們開始討論javascript的面向?qū)ο?面向?qū)ο蟾拍罾斫?面向?qū)ο笳Z言有個標(biāo)志=>它們都具有類的概念,通過類可以創(chuàng)建任意多個具有相同屬性和方法的對象。面向?qū)ο笥腥筇匦? 封裝 繼承 多態(tài) 但JS中對象與純面向?qū)ο笳Z言中的對象是不同的 J...
摘要:這個算法看似不錯而且簡單,不過存在這一個致命傷當(dāng)兩個對象互相引用的時候,就永遠不會被回收于是引用計數(shù)算法就永遠回收不了這兩個對象,下面介紹另一種算法。 前言 ? 如果要問Java與其他編程語言最大的不同是什么,我第一個想到的一定就是Java所運行的JVM所自帶的自動垃圾回收機制,以下是我學(xué)習(xí)JVM垃圾回收機制整理的筆記,希望能對讀者有一些幫助。 哪些內(nèi)存需要回收?what? ? ...
閱讀 1833·2023-04-26 02:32
閱讀 582·2021-11-18 13:12
閱讀 2461·2021-10-20 13:48
閱讀 2535·2021-10-14 09:43
閱讀 3845·2021-10-11 10:58
閱讀 3525·2021-09-30 10:00
閱讀 2946·2019-08-30 15:53
閱讀 3499·2019-08-30 15:53