[JAVA靈魂10問]訪問權限的拷問:你懂的怎麼使用clone嗎

[JAVA靈魂10問]你知道java的重寫嗎?
clone:這個方法估計都不陌生。object種的方法。

在這裏插入圖片描述
這個是object中的一個方法,我們都知道,任何類都會繼承object這個類。
首先提出一個問題:

public class Java_Access {
	public static void main(String[] args) throws Exception {
		Object user = new User();
		user.clone();
	}
}

class User {
	
}

這個clone的方法會報錯嗎?
如果你的答案時肯定的,且清晰的知道爲什麼,就可以愉快的跳過下面的內容。
如果你不知道會不會報錯。那麼就接着往下看。

答案:這個在編譯的時候就會出錯。


分析:

這裏就涉及到clone方法訪問的權限:
protected:同類,同包或者子類
當我們訪問一個方法的時候一共需要遵循兩個原則:
1.方法的提供者是否符合要求
2.方法的調用者是否符合要求

首先拋出兩個問題:

1.clone方法的調用者是否是User
2.User所繼承的父類Object是不是Java_Access的父類

在這個方法中以clone爲例:
①:方法的提供者:java.lang.Object
方法的調用者:xxx.xxx.Java_Access
這裏方法的調用者並不是User。

而user.clone()的意思完整的來說:Java_Access的main方法中,創建了一個User對象,並且調用了user對象的clone方法。
所以,clone並不符合同類或者同包的概念。


②:這裏clone方法的提供者Object和Java_Access並沒有父子關係

在這裏插入圖片描述
這裏用一張圖來表示。java_Access和User都有一個名叫Object的父類,但是這兩個Object的之間並沒有意點關係。所以,Java_Access並不能調用User父類Object中clone的方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章