基于Java protected的深入理解
更新時(shí)間:2013年06月04日 16:24:32 作者:
本篇文章是對(duì)Java protected進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
一提到訪問(wèn)控制符protected,即使是初學(xué)者一般都會(huì)很自信的認(rèn)為自己在這方面的理解沒(méi)有問(wèn)題。那好,我們提一個(gè)問(wèn)題出來(lái)看看.....
請(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 方法
請(qǐng)看下面兩端代碼,其中包B中的貓和鼠都繼承了動(dòng)物類。
復(fù)制代碼 代碼如下:
//代碼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)文章
淺談Java 三種方式實(shí)現(xiàn)接口校驗(yàn)
這篇文章主要介紹了淺談Java 三種方式實(shí)現(xiàn)接口校驗(yàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
java實(shí)現(xiàn)圖片的上傳與展示實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)圖片的上傳與展示的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12
springBoot 項(xiàng)目排除數(shù)據(jù)庫(kù)啟動(dòng)方式
這篇文章主要介紹了springBoot 項(xiàng)目排除數(shù)據(jù)庫(kù)啟動(dòng)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Java 實(shí)現(xiàn)限流器處理Rest接口請(qǐng)求詳解流程
在工作中是否會(huì)碰到這樣的場(chǎng)景,高并發(fā)的請(qǐng)求但是無(wú)法全部執(zhí)行,需要一定的限流。如果你是使用的微服務(wù)框架,比如SpringCloud,可以使用Gateway增加限流策略來(lái)解決。本篇文章是在沒(méi)有框架的情況實(shí)現(xiàn)限流器2021-11-11
Java?PTA?計(jì)算3到7位?水仙花數(shù)實(shí)例
這篇文章主要介紹了Java?PTA?計(jì)算3到7位?水仙花數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
java方法重載和參數(shù)類型自動(dòng)提升方式
這篇文章主要介紹了java方法重載和參數(shù)類型自動(dòng)提升方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02

