基于Java protected的深入理解
請(qǐng)看下面兩端代碼,其中包B中的貓和鼠都繼承了動(dòng)物類。
//代碼1:包A中有一個(gè)動(dòng)物類
package testa;
public class Animal {
protected void crowl(String c){
System.out.println(c);
}
}
//代碼2:包B中有兩個(gè)類——貓類和鼠類
package testb;
import testa.Animal;
class Cat extends Animal{
}
class Rat extends Animal{
public void crowl(){
crowl("zhi zhi"); //沒(méi)有問(wèn)題,繼承了Animal中的protected方法——crowl(String)
Cat cat=new Cat();
cat.crowl("miao miao"); //wrong, The method crowl(String) from the type Animal is not visible
}
}
既然,貓和鼠都繼承了動(dòng)物類,那么在鼠類的作用范圍內(nèi),看不到貓所繼承的crowl()方法呢?
癥結(jié)所在:
protected受訪問(wèn)保護(hù)規(guī)則是很微妙的。雖然protected域?qū)λ凶宇惗伎梢?jiàn)。但是有一點(diǎn)很重要,子類只能在自己的作用范圍內(nèi)訪問(wèn)自己繼承的那個(gè)父類protected域,而無(wú)法到訪問(wèn)別的子類(同父類的親兄弟)所繼承的protected域。 說(shuō)白了就是:老鼠只能叫"zhi,zhi"。即使他能看見(jiàn)貓(可以在自己的作用域內(nèi)創(chuàng)建一個(gè)cat對(duì)象),也永遠(yuǎn)無(wú)法學(xué)會(huì)貓叫。
也就是說(shuō),cat所繼承的crowl方法在cat類作用范圍內(nèi)可見(jiàn)。但在rat類作用范圍內(nèi)不可見(jiàn),即使rat,cat是親兄弟也不行。
另外:這就是為什么我們?cè)谟胏lone方法的時(shí)候不能簡(jiǎn)單的直接將對(duì)象aObject.clone()出來(lái)的原因了。
總之,當(dāng)B extends A的時(shí)候,在子類B的作用范圍內(nèi),只能調(diào)用本子類B定義的對(duì)象的protected方法(該方法從父類A中繼承而來(lái))。而不能調(diào)用其他A類對(duì)象的protected 方法
- JAVA中static方法的用法實(shí)例詳解
- 實(shí)例分析Java中public static void main(String args[])是什么意思
- java必學(xué)必會(huì)之static關(guān)鍵字
- 深入淺析Java中Static Class及靜態(tài)內(nèi)部類和非靜態(tài)內(nèi)部類的不同
- 從內(nèi)存地址解析Java的static關(guān)鍵字的作用
- 詳解Java編程中static關(guān)鍵字和final關(guān)鍵字的使用
- Java中static作用詳解
- Java里的static import使用小結(jié)
- Java中static關(guān)鍵字的作用和用法詳細(xì)介紹
- java之static關(guān)鍵字用法實(shí)例解析
- Java修飾符 abstract,static,final 的區(qū)別詳解
- Java中的static靜態(tài)代碼塊的使用詳解
- java 中的static關(guān)鍵字和final關(guān)鍵字的不同之處
- 詳解Java編程中protected修飾符與static修飾符的作用
相關(guān)文章
Spring cloud Feign 深度學(xué)習(xí)與應(yīng)用詳解
這篇文章主要介紹了Spring cloud Feign 深度學(xué)習(xí)與應(yīng)用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-06-06在Spring?Boot使用Undertow服務(wù)的方法
Undertow是RedHAT紅帽公司開源的產(chǎn)品,采用JAVA開發(fā),是一款靈活,高性能的web服務(wù)器,提供了NIO的阻塞/非阻塞API,也是Wildfly的默認(rèn)Web容器,這篇文章給大家介紹了在Spring?Boot使用Undertow服務(wù)的方法,感興趣的朋友跟隨小編一起看看吧2023-05-05Java中三種零拷貝的實(shí)現(xiàn)示例以及對(duì)比詳解
這篇文章主要介紹了Java中三種零拷貝的實(shí)現(xiàn)示例以及對(duì)比詳解,本文主要是介紹幾種零拷貝的實(shí)現(xiàn)示例,以及與最傳統(tǒng)的做一個(gè)對(duì)比,看看在效率上到底有多大的提升,需要的朋友可以參考下2023-12-12實(shí)例解析Java設(shè)計(jì)模式編程中的適配器模式使用
本篇文章主要通過(guò)實(shí)例對(duì)適配器模式進(jìn)行了詳解,需要的朋友可以參考下2017-04-04AsyncHttpClient KeepAliveStrategy源碼流程解讀
這篇文章主要為大家介紹了AsyncHttpClient KeepAliveStrategy源碼流程解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12Java實(shí)現(xiàn)利用廣度優(yōu)先遍歷(BFS)計(jì)算最短路徑的方法
這篇文章主要介紹了Java實(shí)現(xiàn)利用廣度優(yōu)先遍歷(BFS)計(jì)算最短路徑的方法,實(shí)例分析了廣度優(yōu)先遍歷算法的原理與使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04springboot短信驗(yàn)證碼登錄功能的實(shí)現(xiàn)
這篇文章主要介紹了springboot短信驗(yàn)證碼登錄功能的實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02認(rèn)識(shí)Java底層操作系統(tǒng)與并發(fā)基礎(chǔ)
這篇文章主要介紹了認(rèn)識(shí)Java底層操作系統(tǒng)與并發(fā)基礎(chǔ),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-07-07