java中default_Java 中關于default 訪問權限的討論

Java中關于成員變量訪問權限問題一般書中會給出如下表格:

a0202f441b211b5a174d1182427f339e.png

簡單地描述一下表中的內容:用private 修飾的成員變量只能在類內部訪問;用default修飾的成員變量可以再內部訪問,也可以被同個包(同一目錄)中的類訪問;default修飾的成員變量既可以在類內部訪問,又可以被同個包中的類訪問,還能被子類訪問;public可以被任何地方的類訪問。

我們可以用隱私程度來表示各種修飾符的權限,即:private > default > protected > public。private 、 protected 、public我們先不討論其訪問,我們著重討論default的訪問權限。在定義類的成員變量時,不用default去修飾成員變量,即是說,如果沒有修飾符Java就將它默認是default類型的成員變量,如:int age; 。如果加了default則編譯時會報錯。按照以上說法,default型的成員變量是不能夠在子類中被訪問的,但是,事實上是不是如此呢?其實不然,這里缺少了一個限制條件,那就是子類和父類不在同一包中時,default型的成員變量是不能夠在子類中被訪問。即是說,如果子類和父類在同一包中,那么父類的default型的成員變量是能夠被子類訪問的。我們來舉個例子:文件名是:Inherite.java

class Person{

String name;

protected int age;

}

class Student extends Person{

String school;

double score;

}

public class Inherite {

public static void main (String [] argv ){

Student S = new Student ();

S.name = "卓增泗";

S.school = "交通大學";

S.age = 24;

S.score = 95.5;

System.out.println("我是" + S.name + ",今年" + S.age + "歲,畢業于" + S.school + ",平均成績是:" + S.score);

}

}

最終的結果是:

b72f5e117bc7a7dc7b2b8862ac45fc92.png

這個結果說明,子類是可以訪問父類的default型的成員變量的。但是,當它們不在同一包中呢?我們再舉一個例子:文件名1:Person.java ?文件名2:Inherite1.java

//文件1:Person.java

package heri;

public class Person {

String name;

public int age;

}

這個文件編譯后*.class文件位于heri文件夾中,編譯命令為:javac -d . Person.java

//文件名:Inherite1.java

class Student extends Person{

String school;

double score;

}

public class Inherite1 {

public static void main (String [] argv ) {

Student S = new Student ();

S.name = "卓增泗";

S.school = "交通大學";

S.age = 24;

S.score = 95.5;

System.out.println("我是" + S.name + ",今年" + S.age + "歲,畢業于" + S.school + ",平均成績是:" + S.score);

}

}

最終結果為:

a7d3bb0b627f54349e297683dc8a9c14.png

可知,編譯出現了兩個錯誤,即是default型的成員變量。

那么如何來解釋這一現象呢?前面說過,因為隱私程度default高于protected,所以在同一包中時,子類也是一種類,這樣子類就被視為是同一包中的類,這樣的話子類就具有default的訪問權限了。當不在同一包中時,子類就沒有default的訪問權限了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/528982.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/528982.shtml
英文地址,請注明出處:http://en.pswp.cn/news/528982.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python手機解釋器_python3

Python解釋器Linux/Unix的系統上,Python解釋器通常被安裝在 /usr/local/python3這樣的有效路徑(目錄)里。我們可以將路徑 /usr/local/python3/bin 添加到您的Linux/Unix操作系統的環境變量中(最好參照您python的安裝路徑進行添加),這樣您就可以通過 shel…

increment java_Java中的increment()有什么作用?

publicclassThisTest{privateinti0;//第一個構造器:有一個int型形參ThisTest(inti){this.ii1;//此時this表示引用成員變量i,而非函數參數iSystem.out.println("Intconstructori—...public class ThisTest {private int i0;//第一個構造器&#xff…

python保存模塊_Python使用Pickle模塊進行數據保存和讀取的講解

pickle 是一個 python 中, 壓縮/保存/提取 文件的模塊,字典和列表都是能被保存的.但必須注意的是python2以ASCII形式保存,而在python3中pickle是使用轉換二進制的數據壓縮方法保存數據所以,在保存或者讀取數據的時候,打開文件應該…

java 輸出當月日歷_java 實現打印當前月份的日歷

實現當前日歷的打印,當前日期用*來表示。關鍵得出這個月的第一天是星期幾。基姆拉爾森計算公式W (d2*m3*(m1)/5yy/4-y/100y/400) mod 7在公式中d表示日期中的日數1,m表示月份數。y表示年數。注意1:在公式中有個與其它公式不同的地方&#xff…

pythonmessage用法_請問Mac下如何用python讀取iMessage信息?

很早之前,學習Python web編程的時候,就涉及一個Python的urllib。可以用urllib.urlopen(“url”)。read()可以輕松讀取頁面上面的靜態信息。但是,隨著時代的發展,也來越多的網頁中更多的使用javascript、jQuery、PHP等語言動態生成…

xmlhttprequest 跨域_跨域資源共享(CORS)安全性

跨域資源共享(CORS)安全性背景 提起瀏覽器的同源策略,大家都很熟悉。不同域的客戶端腳本不能讀寫對方的資源。但是實踐中有一些場景需要跨域的讀寫,所以出現了一些hack的方式來跨域。比如在同域內做一個代理,JSON-P等。但這些方式都存在缺陷&…

java 圖片識別 tess4j_圖像文字識別(四):java調用tess4j識別圖像文字

轉自:https://blog.csdn.net/a745233700/article/details/80203340javajava調用tess4j識別圖像文字Tesseract-OCR支持中文識別,而且開源和提供全套的訓練工具,是快速低成本開發的首選。前面記錄過在java中調用tesseract-orc,該方法…

sql in轉換為join_同一個SQL語句,為啥性能差異咋就這么大呢?(1分鐘系列)

《數據庫允許空值,往往是悲劇的開始》一文通過explain來分析SQL的執行計劃,來分析null對索引命中情況的影響,有不少朋友留言,問explain結果中的type字段,ref,ALL等不一樣的值究竟是什么含義。今天花1分鐘簡…

java rmi接口 超時設置_Spring RMI客戶端讀超時設置 | 學步園

標準Java的RMI設置我所知道的有三種方式,其中第1、2種不區分框架均適用,但影響整個JVM級別的RMI服務1. 啟動時設置sun.rmi.transport.tcp.responseTimeout,單位是毫秒java -Dsun.rmi.transport.tcp.responseTimeout502.在應用程序中設置環境變…

python黑客庫長安十二時辰 更新_【Python成長之路】python 從零學爬蟲 -- 沒時間看《長安十二時辰》電視劇怎么辦?直接爬取所有劇情吧!...

【寫在前面】最近大火的《長安十二時辰》真的是好看,算的是良心網劇了。但是由于平時工作時間較長,經常無法準時追劇,并且又因為不想見到元裁那對挨千刀的(作為演員,演技是值得肯定的,角色演繹的讓人看的心煩)。因此就…

java字符串筆試題_五道Java常見筆試題及答案匯總

1、String和StringBuffer的區別?答:Java平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個字符的字符數據。這個String類提供了數值不可改變的字符串。而這個StringBuffer類提供的字符串進行…

遙感原理與應用孫家炳_2.2遙感應用模型

章節概覽遙感應用模型是遙感的一種定量化手段,通常在遙感領域有一個更廣為人知的名詞——定量遙感。但是定量遙感是一種方法模型而非技術手段,隨著科學的發展,熱門越來越體會到定量遙感的必要性。定量遙感的應用是十分廣泛的,也是…

python升級命令debian_debian python 2.7.11 升級

首先下載源tar包可利用linux自帶下載工具wget下載,如下所示:下載完成后到下載目錄下,解壓tar -zxvf Python-2.7.11.tgz進入解壓縮后的文件夾cdPython-2.7.11在編譯前先在/wp-content/local建一個文件夾python27(作為python的安裝路徑&#xf…

mysql必學十大必會_MYSQL 學習(一)--啟蒙篇《MYSQL必知必會》

MYSQL必知必會一. DDL 數據定義語言Data Definition Language 是指CREATE,ALTER和DROP語句。DDL允許添加/修改/刪除包含數據的邏輯結構,或允許用戶訪問/維護數據(數據庫,表,鍵,視圖......)的邏輯結構。DDL是關于“元數…

python連接wifi_python 自動重連wifi windows的方法

如下所示:# codingutf-8import urllib2import urllibfrom cookielib import CookieJarimport osimport reimport timeclass ConnectWeb(object):def __init__(self):self.cookiejarinmemory CookieJar()self.opener urllib2.build_opener(urllib2.HTTPCookieProce…

java for新循環_Java 8 新語法習慣 (for 循環的函數替代方案)

我們看這樣一個示例public class ForDemo {public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("Get set...");for (int i 0; i < 4; i) {System.out.println(i"...");}}}測試結果Get set...0...1...2...…

喜馬拉雅 xm文件轉m4a_喜馬拉雅電臺、課程語音如何轉成文字?

今天看了一篇文章“AI面前人類一敗涂地”就是說了AI的發展讓所有的事情幾乎都可以實現科技化&#xff0c;無需人工操作&#xff0c;工作效率還比人工要高很多。這樣說來的確是這樣。語音轉換也是其中一門技術&#xff0c;人們現在對于語音的交流很多&#xff0c;比如社交軟件的…

java url特殊字符轉義字符_URL中包含有特殊字符,進行轉義

String temp URLEncoder.encode(json);URL中的特殊字符有些符號在URL中是不能直接傳遞的&#xff0c;如果要在URL中傳遞這些特殊符號&#xff0c;那么就要使用他們的編碼了。編碼的格式為&#xff1a;%加字符的ASCII碼&#xff0c;即一個百分號%&#xff0c;后面跟對應字符的A…

java 多重注解_Java注解-元數據、注解分類、內置注解和自定義注解

大家好&#xff0c;我是樂字節的小樂&#xff0c;上次說過了Java多態的6大特性|樂字節&#xff0c;接下來我們來看看Java編程里的注解。Java注解有以下幾個知識點&#xff1a;元數據注解的分類內置注解自定義注解注解處理器Servlet3.0本文先介紹前面4個知識點&#xff1a;元數據…

python getattr函數_Python中的getattr()函數詳解

在計算機編程中&#xff0c;自省是指這種能力&#xff1a;檢查某些事物以確定它是什么、它知道什么以及它能做什么。自省向程序員提供了極大的靈活性和控制力。自省(introspection)&#xff0c;在計算機編程領域里&#xff0c;是指在運行時來判斷一個對象的類型的能力。它是Pyt…