java中的類為什么只能用public修飾?
首先,類只能使用public修飾是一個(gè)偽命題,應(yīng)該說(shuō)我們只見(jiàn)到過(guò)使用public修飾的類,還有一些類沒(méi)有訪問(wèn)修飾符,此時(shí)訪問(wèn)權(quán)限為default。其次,類實(shí)際上分為外部類和內(nèi)部類(inner class),一般的類都是外部類,內(nèi)部類需要依賴外部類生成,內(nèi)部類可以用各種訪問(wèn)修飾符修飾。所以問(wèn)題轉(zhuǎn)化成,為什么不能使用private和protected修飾外部類?
我們知道,在Java中,訪問(wèn)修飾符可以修飾類、方法、變量和構(gòu)造方法。
訪問(wèn)權(quán)限由高到低有以下4種
| 類內(nèi)部 | 本包 | 子包 | 外部包 | |
|---|---|---|---|---|
| public | v | v | v | v |
| protected | v | v | v | x |
| default | v | v | x | x |
| private | v | x | x | x |
我們使用訪問(wèn)修飾符去修飾類,就是為了讓類之間根據(jù)各種權(quán)限來(lái)訪問(wèn)。
假如外部類使用private修飾,則不能被其它類所訪問(wèn),這個(gè)類也就失去了意義。
假如外部類使用protected修飾,看起來(lái)與default相比,在包內(nèi)可訪問(wèn)的基礎(chǔ)上,包外的子類也可訪問(wèn)。但包外想成為子類需要先繼承父類,然而無(wú)法找到該父類實(shí)際上無(wú)法繼承(先有雞還是先有蛋的問(wèn)題),效果與default一致,也就沒(méi)必要存在了。
關(guān)于內(nèi)部類:
內(nèi)部類分為成員內(nèi)部類、局部?jī)?nèi)部類、匿名內(nèi)部類和靜態(tài)內(nèi)部類。
成員內(nèi)部類是定義在另一個(gè)類中的類,是最普通的一種內(nèi)部類。
class Circle {
double radius = 0;
public Circle(double radius) {
this.radius = radius;
}
class Draw { //內(nèi)部類
public void drawSahpe() {
System.out.println("drawshape");
}
}
}
這樣看起來(lái),類Draw像是類Circle的一個(gè)成員,Circle稱為外部類。成員內(nèi)部類可以無(wú)條件訪問(wèn)外部類的所有成員屬性和成員方法(包括private成員和靜態(tài)成員)。
內(nèi)部類可以用private、protected、default、public修飾,使用private修飾只能在外部類內(nèi)訪問(wèn)。
關(guān)于接口
public interface Comparable<T>{
int compareTo(T other);
}
接口中的所有方法自動(dòng)地屬于public,在接口中聲明方法時(shí)不必提供關(guān)鍵字public。
修飾構(gòu)造方法
在單例設(shè)計(jì)模式中,我們使用private修飾構(gòu)造方法,將構(gòu)造器私有化,表示在類外部不能實(shí)例化該類。在類內(nèi)部實(shí)例化后,提供一個(gè)可供外部訪問(wèn)的方法,返回實(shí)例對(duì)象。
public class SingletonTest {
public static void main(String[] args) {
//測(cè)試
Singleton instance = Singleton.getInstance();
Singleton instance2 = Singleton.getInstance();
System.out.println(instance == instance2); // true
System.out.println("instance.hashCode=" + instance.hashCode());
System.out.println("instance2.hashCode=" + instance2.hashCode());
}
}
//餓漢式
class Singleton {
//1. 構(gòu)造器私有化
private Singleton() {
}
//2.本類內(nèi)部創(chuàng)建對(duì)象實(shí)例
private final static Singleton instance = new Singleton();
//3. 提供一個(gè)公有的靜態(tài)方法,返回實(shí)例對(duì)象
public static Singleton getInstance() {
return instance;
}
以上就是java中的類為什么只能用public修飾?的詳細(xì)內(nèi)容,更多關(guān)于java public修飾的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringCloud網(wǎng)關(guān)組件zuul實(shí)例解析
這篇文章主要介紹了SpringCloud網(wǎng)關(guān)組件zuul實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
Java中MyBatis Plus知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理一篇關(guān)于Java中MyBatis Plus知識(shí)點(diǎn)總結(jié),需要的朋友們參考下。2019-10-10
Java生成的隨機(jī)數(shù)靠譜嗎?多少次會(huì)重復(fù)?
今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著Java生成的隨機(jī)數(shù)靠不靠譜展開(kāi),文中有非常詳細(xì)的介紹,需要的朋友可以參考下2021-06-06
Springboot Autowried及Resouce使用對(duì)比解析
這篇文章主要介紹了Springboot Autowried及Resouce使用對(duì)比解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
flyway實(shí)現(xiàn)java 自動(dòng)升級(jí)SQL腳本的問(wèn)題及解決方法
大家在平時(shí)開(kāi)發(fā)自己寫(xiě)SQL語(yǔ)句忘記在所有環(huán)境執(zhí)行,需要新增環(huán)境做數(shù)據(jù)遷移,那么遇到這樣的問(wèn)題該如何解決呢?本文通過(guò)場(chǎng)景分析給大家介紹java 自動(dòng)升級(jí)SQL腳本的策略,感興趣的朋友一起看看吧2021-07-07
使用HttpClient實(shí)現(xiàn)文件的上傳下載方法
下面小編就為大家?guī)?lái)一篇使用HttpClient實(shí)現(xiàn)文件的上傳下載方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12

