在寫代碼的時候有個問題:包內定義了一個接口類,另外一個包要實現它,這里采用接口隔離與依賴倒置原則,將兩個包的依賴關系倒置過來。但是,這里就遇到了一個問題,實現類采用工廠模式來實例化,所以實現類就不想暴露給包外,但是實現類還要實現public接口。所以這里有產生了一個疑問,如果類是default類型,成員函數是public類型,那么訪問限制是怎樣的呢?
實現驗證
1. 先在一個包中定義一個接口類:
package mytest public interface ClassAccessTest{ void getData(); CharSeqence getString();}2. 在實現包中定義實現類和工廠
package classaccesstest import mytest.ClassAccessTest class ClassAccessTestImp implements ClassAccessTest{ int mA = 0; ClassAccessTestImp(int a) { mA = a; } public void getData() { System.out.printlin(" the data is " + mA); } public CharSequence getString() { return (" the data is " + mA); } package classaccesstest import mytest.ClassAccessTest public class Factory{ public static ClasAccessTest getAccessTest() { return new ClassAccessTestImp(10); }}3. 再在原包中使用接口:
package mytest import classacesstest.Factory//import classaccesstest.ClassAccessTestImp public class TestMain{ public static void main(String arg[]) { Factory.getAccessTest().getString();<span style="white-space:pre"> </span>//<span style="font-family: Arial, Helvetica, sans-serif;">ClassAccessTest test = </span>new <span style="font-family: Arial, Helvetica, sans-serif;">ClassAccessTestImp(10);</span> }}4.結果:
在TestMain類中,使用非注釋掉的部分可以正常運行,使用注釋掉的部分會報錯,ClassAccessTestImp未定義
結論
由上推論出,java中類的訪問權限是可以小于成員的訪問權限的,依賴倒置和包的封裝性的要求下,可以實現滿足要求。
新聞熱點
疑難解答