日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

重点保护

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 重点保护 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在“ Java的一些句子 ”一文中,我寫道: “受保護的方法和字段可以在同一包中的類中使用(到目前為止與私有包相同),此外,還可以從其他類中使用受保護的方法和字段,這些類擴展了包含受保護的字段或方法。”

盡管以上陳述是正確的,但它可能無法揭示全部事實,我認為這值得一新。

當您在一個類中有一個專用X(方法,字段,類,接口,構造函數)時,可以從頂級類中使用該X。 如前一篇文章所述,使用意味著可以在實例“ this ”中訪問X,而在其他實例中,只要代碼訪問與X在同一頂級類中,就可以訪問X。

如果刪除X前面的private關鍵字,則將可見性擴展到程序包級別。 您可以在包中使用X,就像在私有的類中使用X之前一樣。

如果我們再走一步,并在X的前面插入關鍵字protected ,它將在擴展了聲明X的類的類中可見,但無法從該類內部以私有X或從內部打包private的方式訪問同一方式。相同的包裝。 由于protected擴展了私有包對X的可見性,因此,仍然可以以相同的方式在包內使用受保護的X,但在包外不能以相同的方式使用。

不同之處在于,您只能在擴展X功能的代碼中訪問受保護的X。

以上不是精確的定義。 我在此博客中多次引用的Java語言規范在6.6.2章中對此進行了詳細說明。 精確,完整,但閱讀起來可能不容易或有趣,這對本文也可能是正確的,但是由于您正在閱讀,所以我認為您覺得它很有趣,很有教育意義,或者您有一些非常特定的原因來閱讀它。

當您與聲明X的類位于同一包中時,可以在其他實例上訪問X。 我們可以有一些簡單的類來演示這一點。 首先,我們可以有一個擴展的根類:

package a; public class A {protected void protectedMethod(A a) { } }

我們有類“ B”,它擴展了“ A”,并且在同一包中。

package a; import a.A; public class B extends A {@Overrideprotected void protectedMethod(A a) {a.protectedMethod(this);super.protectedMethod(this);} }

如果我們將類“ B”移動/復制到另一個包,例如:

package b; import a.A; public class B extends A {@Overrideprotected void protectedMethod(A a) {a.protectedMethod(this);super.protectedMethod(this);} }

那么第6行將無法編譯。 在前一個程序包中時,編譯器允許它訪問該方法,因為程序包保護使其成為可能。 無論在什么實現實例中,方法的參數“ a”都在同一包中。 在“ b.B”類的情況下,程序包保護不允許訪問,并且因為我們存儲在方法參數“ a”中的實際對象實例可能是“ b.B”未擴展的類的實例,因此無法訪問它。 它可以是該類示例的實例:

package c; import a.A; public class C extends A { }

您可以做的是:

  • 覆蓋子類中的方法或
  • 使用關鍵字super調用父方法。

通常,這實際上是您可以使用其程序包外部的受保護方法來做的所有事情。

翻譯自: https://www.javacodegeeks.com/2015/01/fine-points-of-protection.html

總結

以上是生活随笔為你收集整理的重点保护的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。