爲何類只能用public修飾?

爲何類只能使用public修飾?

首先,類只能使用public修飾是一個僞命題,應該說咱們只見到過使用public修飾的類,還有一些類沒有訪問修飾符,此時訪問權限爲default。其次,類實際上分爲外部類和內部類(inner class),通常的類都是外部類,內部類須要依賴外部類生成,內部類能夠用各類訪問修飾符修飾。因此問題轉化成,爲何不能使用private和protected修飾外部類?java

咱們知道,在Java中,訪問修飾符能夠修飾類、方法、變量和構造方法。設計模式

訪問權限由高到低有如下4種測試

類內部 本包 子包 外部包
public v v v v
protected v v v x
default v v x x
private v x x x

咱們使用訪問修飾符去修飾類,就是爲了讓類之間根據各類權限來訪問。this

假如外部類使用private修飾,則不能被其它類所訪問,這個類也就失去了意義。設計

假如外部類使用protected修飾,看起來與default相比,在包內可訪問的基礎上,包外的子類也可訪問。但包外想成爲子類須要先繼承父類,然而沒法找到該父類實際上沒法繼承(先有雞仍是先有蛋的問題),效果與default一致,也就不必存在了。code

關於內部類:

內部類分爲成員內部類、局部內部類、匿名內部類和靜態內部類。對象

成員內部類是定義在另外一個類中的類,是最普通的一種內部類。繼承

class Circle {
    double radius = 0;
     
    public Circle(double radius) {
        this.radius = radius;
    }
     
    class Draw {     //內部類
        public void drawSahpe() {
            System.out.println("drawshape");
        }
    }
}

這樣看起來,類Draw像是類Circle的一個成員,Circle稱爲外部類。成員內部類能夠無條件訪問外部類的全部成員屬性和成員方法(包括private成員和靜態成員)。接口

內部類能夠用private、protected、default、public修飾,使用private修飾只能在外部類內訪問。get

關於接口

public interface Comparable<T>{
    int compareTo(T other);
}

接口中的全部方法自動地屬於public,在接口中聲明方法時沒必要提供關鍵字public。

修飾構造方法

在單例設計模式中,咱們使用private修飾構造方法,將構造器私有化,表示在類外部不能實例化該類。在類內部實例化後,提供一個可供外部訪問的方法,返回實例對象。

public class SingletonTest {
	public static void main(String[] args) {
		//測試
		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. 構造器私有化
	private Singleton() {
	}
	
	//2.本類內部建立對象實例
	private final static Singleton instance = new Singleton();
	
	//3. 提供一個公有的靜態方法,返回實例對象
	public static Singleton getInstance() {
		return instance;
	}
相關文章
相關標籤/搜索