1. 程式人生 > >介面中同一個方法不寫public,為什麼在實現類中一定要寫public呢?

介面中同一個方法不寫public,為什麼在實現類中一定要寫public呢?

首先,介面中所有方法預設都是public,至於為什麼要是public,原因在於如果不是public,那麼只能在同個包下被實現,可訪問許可權就降低很多了,那麼在實現類中,實現的類相當於子類,子類的訪問許可權是不能比父類小的,而在java中一個類如果沒有許可權的修飾符,預設是friendly(同一個包內的其它類才可訪問),所以在實現類中一定要寫public
補充:

訪問許可權   類   包  子類  其他包描述

    public     ∨   ∨   ∨     ∨ 其它樓房的人也能用我, 外星人不能用我

    protect    ∨   ∨   ∨     ×只有我自己和與我住在同一個樓房裡的人以及我的子孫能用我

    default    ∨   ∨   ×    ×只有我自己和與我住在同一個樓房裡的人能用我

    private    ∨   ×   ×   ×只有我自己可以用我

Java中所謂的“friendly”和“default”都只是一種說法,並不是說真有那麼一個指定預設訪問許可權的關鍵字(default倒的確是個語言關鍵字,但那是用在switch語句中的,跟樓主的問題無關)。

Java中類的成員許可權修飾符只有三個:public/private/protected。
當一個類的成員前面沒有任何訪問許可權修飾符修飾時,我們就說他是“fiendly許可權”,或者“default許可權”(注意,只是這樣“說”,並不是主你可以那樣寫上去)。這種說法指的就是那種可以從package內部或子類中訪問的成員。


C++中也沒有“friendly”,只有一個“friend”,但那是另一個意思。它雖然跟訪問許可權有點關係,但並不是一個訪問許可權修飾符,C++的許可權修飾符也是隻有那3種。而且C++預設的是private,這點也跟Java不一樣。

C#倒是給另外一種“預設的”許可權修飾符賦於了一個真正的語言關鍵字:internal。即寫上internal跟不寫是一個意思。

相關推薦

介面同一個方法public為什麼在實現一定public

首先,介面中所有方法預設都是public,至於為什麼要是public,原因在於如果不是public,那麼只能在同個包下被實現,可訪問許可權就降低很多了,那麼在實現類中,實現的類相當於子類,子類的訪問許可權是不能比父類小的,而在java中一個類如果沒有許可權的修飾符,預設是f

spring事務管理基於xml配置完成事務回滾;spring資料庫表中欄位名和pojo屬性名一致時候實現RowMapper介面手動封裝

宣告使用JDK8,spring5.0.7, 測試說明: service 層 宣告介面進行轉賬,從A轉賬B ,然後對AB 進行更新操作,在事務中對find方法開啟 只讀許可權,無法進行更新操作,造成事務回滾進行測試事務; 主要測試方法:* void tra

spring在多個service方法同一個事物

問題:1、spring重啟在啟動階段初始化兩次 第一次通過web.xml配置以XmlWebApplicationContext為入口 第二次通過ClassPathXmlApplicationContext為入口

帶插件 自己js實現批量上傳文件及進度顯示

批量上傳 發的 xhr string () .cn tom 需要 pen 今天接受項目中要完成文件批量上傳文件而且還要顯示上傳進度,一開始覺得這個應該不是很麻煩,當我在做的時候遇到了很多問題,很頭疼啊。 不過看了別人寫的代碼,自己也測試過,發現網上好多都存在一些問題,並不是

Scrapy(爬蟲框架)Spiderparse()方法的工作機制

生成 工作 就會 ffffff 遞歸 賦值 () 其他 根據 parse(self,response):當請求url返回網頁沒有指定回調函數,默認的Request對象的回調函數,用來處理網頁返回的response,和生成的Item或者Request對象 以下分析一下pars

資料庫mysql.sock存在問題Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2) "

轉載:https://blog.csdn.net/hjf161105/article/details/78850658 1.執行如下命令 find / -name mysql.sock 並且能查到結果的話,只需將查到的結果做一個軟連線到/tmp目錄下即可解決 2.如果執行以上命令,沒

Android踩坑隨筆FragmentonActivityResult方法被呼叫

最近專案裡要做頭像功能,參考了這篇部落格(GitHub - zhudfly/SelectAvatarApplication: 一個選擇並顯示頭像圓形控制元件,可以通過拍照或者選擇相簿中的圖片來設定圖片),但是在使用過程中出現拍照無響應,幾經查詢,原因是在Fragment中覆寫onActivityResult(

hexo的next主題部落格加入分類頁面的js實現多級目錄並且能夠點選展開隱藏下級目錄~(知道算算深度優化~~~)

多級標題 在自己的xxxx.md檔案中做如下修改: categories: - 搗蛋鬼 - mac 新建catogery_js.js(名字無所謂) 加入自己的js 我這裡是下面這樣的 function category_js () { $("&

為什麼Android Fragment 頁面onActivityResult方法走?

Android 開發中,有很多頁面是都會有左右滑動功能了,於是有了ViewPager,ViewPager裡面放各自的Fragment,點選某一個Fragment中的按鈕 跳轉到一個Activity頁面 關閉這個頁面是如果需要傳值或者通知前一個Fragment,需要呼叫setResult方法,

Java讀檔案在檔案搜索內容並輸出含有該內容的所有行

1.問題描述 在一個目錄及子目錄下查詢 TXT或Java檔案,從中搜索所有“物件”字樣的行。 在D盤中的所有檔案中搜索含有“物件”的行。 2.解題思路 先找出D盤下所有檔案 再對每個檔案中的每行內容進行,進行查詢,若含有“物件”兩字,輸出該行。 3.程式程式碼 im

private方法能繼承重寫

public class Father { private void f1(){ System.out.println("Father f1()"); } void f2() { System.out.println("Father

(MySql的亂碼解決)關於相同sql指令在eclipse查詢到結果在mysql卻能查詢到結果以及增加資料時列表顯示“?”解決方案

在最初使用jdbc連線資料庫時,大家一定經常遇到一下兩個問題: 1、相同sql指令在eclipse中查詢不到結果,在mysql中卻能查詢到正確結果。 2、在增加列表資料時,雖然能夠增加成功,但增加的資料中文全部變成了“?” 下面將為大家解決這兩個問題。 這兩個問題其實都是編碼不同導致

趣談網路協議---基於JSON的RESTful介面協議:我關心過程請給我結果

SOAP 過於複雜,設計是面向動作的,往往因為架構問題導致併發量上不去。 RESTful 是一種架構模式,主要面向資源,提供無狀態服務,有利於橫向擴充套件應對高併發。 傳輸協議問題 傳輸協議問題—基於 HTTP。 對於 SOAP,建立一個訂單,用 POST 動作

Myeclipsetomcat部署了專案java工程轉為web工程

把專案以Navigator開啟,可以看到.開頭的檔案,比如.projetc。 找到.projetc中<natures>標籤,在裡面加入 <nature>org.eclipse.jem.workbench.JavaEMFNature</nature> &

解決安裝centos 7過程乙太網連線上網路能自動分配ip的問題

今天給虛擬機器上裝centos 7的時候,網路模式用的是NAT模式,安裝過程中網路的ip,子網掩碼等一直不能自動獲取,連線不到,試了好多次都不行。 經過分析,應該是dhcp服務有問題,但是不知道怎麼去修改,本人是菜鳥一個,瞎折騰找了好久終於是調好了,分享一下。 出現的問題

關於相同sql指令在eclipse查詢到結果在mysql卻能查詢到結果以及增加資料時列表顯示“?”解決方案

在最初使用jdbc連線資料庫時,大家一定經常遇到一下兩個問題: 1、相同sql指令在eclipse中查詢不到結果,在mysql中卻能查詢到正確結果。 2、在增加列表資料時,雖然能夠增加成功,但增加的資料中文全部變成了“?” 下面將為大家解決這兩個問題。 這兩個問題其實

在c語言自定義了一個函式在main呼叫時提示找到識別符號

解決方案一: 把定義的函式放在,main函式之前。 void f() { printf("Hello"); } main() { f(); } 解決方案二: 在main函式之前宣告。 void f(); main() { f

Java筆記:[反射篇] 利用反射獲取的私有內部類物件並呼叫該物件的方法

public void smoothScrollBy(int dx, int dy, int duration) { try { Class<?> c = null; try { c = Class

documentid屬性唯一時id選擇器如何工作

目錄 測試程式碼 執行結果 定義 ID選擇器 測試程式碼 <!DOCTYPE html> <html> <head> <meta charset="utf

Python呼叫OpenCV介面的高斯混合模型實現對運動目標的檢測並保存錄制視訊

Python中呼叫OpenCV介面中的高斯混合模型(GMM),實現對運動目標的檢測   import numpy as np import cv2 # TODO: 本程式碼使用OpenCV介面中的高斯混合模型,實現對運動目標的檢測 cap = cv2.VideoCapture(