java類訪問權(quán)限與成員訪問權(quán)限解析
在寫代碼的時(shí)候有個(gè)問題:包內(nèi)定義了一個(gè)接口類,另外一個(gè)包要實(shí)現(xiàn)它,這里采用接口隔離與依賴倒置原則,將兩個(gè)包的依賴關(guān)系倒置過來(lái)。但是,這里就遇到了一個(gè)問題,實(shí)現(xiàn)類采用工廠模式來(lái)實(shí)例化,所以實(shí)現(xiàn)類就不想暴露給包外,但是實(shí)現(xiàn)類還要實(shí)現(xiàn)public接口。所以這里有產(chǎn)生了一個(gè)疑問,如果類是default類型,成員函數(shù)是public類型,那么訪問限制是怎樣的呢?
實(shí)現(xiàn)驗(yàn)證
1. 先在一個(gè)包中定義一個(gè)接口類:
package mytest
public interface ClassAccessTest
{
void getData();
CharSeqence getString();
}
2. 在實(shí)現(xiàn)包中定義實(shí)現(xiàn)類和工廠
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.結(jié)果:
在TestMain類中,使用非注釋掉的部分可以正常運(yùn)行,使用注釋掉的部分會(huì)報(bào)錯(cuò),ClassAccessTestImp未定義
結(jié)論
由上推論出,java中類的訪問權(quán)限是可以小于成員的訪問權(quán)限的,依賴倒置和包的封裝性的要求下,可以實(shí)現(xiàn)滿足要求。
- Java中成員方法與成員變量訪問權(quán)限詳解
- 舉例詳解Java中的訪問權(quán)限修飾符
- 詳細(xì)學(xué)習(xí)Java Cookie技術(shù)(用戶登錄、瀏覽、訪問權(quán)限)
- Java編程訪問權(quán)限的控制代碼詳解
- 理解Java訪問權(quán)限控制
- 詳解Java之路(五) 訪問權(quán)限控制
- Java中四種訪問權(quán)限資料整理
- 解決Java提示正在嘗試分配更低的訪問權(quán)限問題
- Java訪問權(quán)限控制的重要性深入講解
- 淺析java修飾符訪問權(quán)限(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)
- java四種訪問權(quán)限實(shí)例分析
- Java訪問權(quán)限原理與用法詳解
相關(guān)文章
java實(shí)現(xiàn)角色及菜單權(quán)限的項(xiàng)目實(shí)踐
在Java中,實(shí)現(xiàn)角色及菜單權(quán)限管理涉及定義實(shí)體類、設(shè)計(jì)數(shù)據(jù)庫(kù)表、實(shí)現(xiàn)服務(wù)層和控制器層,這種管理方式有助于有效控制用戶權(quán)限,適用于企業(yè)級(jí)應(yīng)用,感興趣的可以一起來(lái)了解一下2024-09-09
java中split()方法以及常見算法經(jīng)典案例
這篇文章主要介紹了java中split()方法以及常見算法的相關(guān)資料,split()方法可以根據(jù)指定的正則表達(dá)式將字符串分割成多個(gè)子字符串,并返回一個(gè)字符串?dāng)?shù)組,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-04-04
Java如何正確處理下載文件時(shí)HTTP頭的編碼問題
這篇文章主要介紹了Java如何正確處理下載文件時(shí)HTTP頭的編碼問題,2023-07-07
通常HTTP消息包括客戶機(jī)向服務(wù)器的請(qǐng)求消息和服務(wù)器向客戶機(jī)的響應(yīng)消息,今天來(lái)講解下正確處理下載文件時(shí)HTTP頭的編碼問題,需要的朋友可以參考下
java工廠實(shí)例BeanFactoryPostProcessor和BeanPostProcessor區(qū)別分析
這篇文章主要為大家介紹了BeanFactoryPostProcessor和BeanPostProcessor區(qū)別示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
idea導(dǎo)入springboot項(xiàng)目沒有maven的解決
這篇文章主要介紹了idea導(dǎo)入springboot項(xiàng)目沒有maven的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
MyBatis啟動(dòng)時(shí)控制臺(tái)無(wú)限輸出日志的原因及解決辦法
這篇文章主要介紹了MyBatis啟動(dòng)時(shí)控制臺(tái)無(wú)限輸出日志的原因及解決辦法的相關(guān)資料,需要的朋友可以參考下2016-07-07
java根據(jù)模板動(dòng)態(tài)生成PDF實(shí)例
本篇文章主要介紹了java根據(jù)模板動(dòng)態(tài)生成PDF實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-04-04

