java中的類為什么只能用public修飾?
首先,類只能使用public修飾是一個偽命題,應(yīng)該說我們只見到過使用public修飾的類,還有一些類沒有訪問修飾符,此時訪問權(quán)限為default。其次,類實(shí)際上分為外部類和內(nèi)部類(inner class),一般的類都是外部類,內(nèi)部類需要依賴外部類生成,內(nèi)部類可以用各種訪問修飾符修飾。所以問題轉(zhuǎn)化成,為什么不能使用private和protected修飾外部類?
我們知道,在Java中,訪問修飾符可以修飾類、方法、變量和構(gòu)造方法。
訪問權(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
我們使用訪問修飾符去修飾類,就是為了讓類之間根據(jù)各種權(quán)限來訪問。
假如外部類使用private修飾,則不能被其它類所訪問,這個類也就失去了意義。
假如外部類使用protected修飾,看起來與default相比,在包內(nèi)可訪問的基礎(chǔ)上,包外的子類也可訪問。但包外想成為子類需要先繼承父類,然而無法找到該父類實(shí)際上無法繼承(先有雞還是先有蛋的問題),效果與default一致,也就沒必要存在了。
關(guān)于內(nèi)部類:內(nèi)部類分為成員內(nèi)部類、局部內(nèi)部類、匿名內(nèi)部類和靜態(tài)內(nèi)部類。
成員內(nèi)部類是定義在另一個類中的類,是最普通的一種內(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'); } }}
這樣看起來,類Draw像是類Circle的一個成員,Circle稱為外部類。成員內(nèi)部類可以無條件訪問外部類的所有成員屬性和成員方法(包括private成員和靜態(tài)成員)。
內(nèi)部類可以用private、protected、default、public修飾,使用private修飾只能在外部類內(nèi)訪問。
關(guān)于接口public interface Comparable<T>{ int compareTo(T other);}
接口中的所有方法自動地屬于public,在接口中聲明方法時不必提供關(guān)鍵字public。
修飾構(gòu)造方法在單例設(shè)計模式中,我們使用private修飾構(gòu)造方法,將構(gòu)造器私有化,表示在類外部不能實(shí)例化該類。在類內(nèi)部實(shí)例化后,提供一個可供外部訪問的方法,返回實(shí)例對象。
public class SingletonTest {public static void main(String[] args) {//測試Singleton instance = Singleton.getInstance();Singleton instance2 = Singleton.getInstance();System.out.println(instance == instance2); // trueSystem.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)建對象實(shí)例private final static Singleton instance = new Singleton();//3. 提供一個公有的靜態(tài)方法,返回實(shí)例對象public static Singleton getInstance() {return instance;}
以上就是java中的類為什么只能用public修飾?的詳細(xì)內(nèi)容,更多關(guān)于java public修飾的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. Java Media Framework 基礎(chǔ)教程2. 解決vue頁面刷新,數(shù)據(jù)丟失的問題3. Python 忽略文件名編碼的方法4. springboot項(xiàng)目整合druid數(shù)據(jù)庫連接池的實(shí)現(xiàn)5. JavaEE SpringMyBatis是什么? 它和Hibernate的區(qū)別及如何配置MyBatis6. python 讀txt文件,按‘,’分割每行數(shù)據(jù)操作7. android studio實(shí)現(xiàn)簡單的計算器(無bug)8. 在Mac中配置Python虛擬環(huán)境過程解析9. Python趣味挑戰(zhàn)之用pygame實(shí)現(xiàn)簡單的金幣旋轉(zhuǎn)效果10. Python中的min及返回最小值索引的操作
