java多態(tài)中的就近原則介紹
直接上題:

題目補(bǔ)充:
class A {
int m; //-10
int getM() {
return m;
}
int seeM() {
return m;
}
}
class B extends A {
int m ; //10
int getM() {
// System.out.println(this.m+"............"+super.m);
return m+10;
}
}
public class Test {
public static void main(String args[]) {
B b = new B(); //先找B,B沒(méi)有再找A,找A的時(shí)候,就要注意:就近原則了
b.m = 10;
//此刻,A類的m為0,B類的m為10
System.out.println("b.seeM():"+b.seeM());
System.out.println("b.getM():"+b.getM());//20
A a = b; //把b符給a這樣創(chuàng)建對(duì)象的方法,還是先找B,B沒(méi)有再找A,找A的時(shí)候,就要注意:就近原則了
//此刻,A類的m仍為0,B類的m仍為10
System.out.println("...................................");
System.out.println("a.seeM():"+a.seeM());
System.out.println("a.getM():"+a.getM());
System.out.println("...................................");
a.m = -10;//A只能改自己的m,不能改B的m,所以
//此刻,A類的m為-10,B類的仍m為10
System.out.println("b.getM():"+b.getM());//20 b始終調(diào)用重寫后的getM()方法
System.out.println("a.getM():"+a.getM());//b.getM()是20,后來(lái)把b賦給a,a也成了20 20
//b調(diào)用的getM()方法是重寫之后的getM()方法,所以是10+10
System.out.println("a.seeM():"+a.seeM());
System.out.println("b.seeM():"+b.seeM());//此時(shí)不管是a的m還是b的m都是-10 -10
System.out.println("a.m:"+a.m+" b.m:"+b.m);
System.out.println("a.getM():"+a.getM());
//因?yàn)閎自己沒(méi)有seeM方法,所以b在使用seeM方法時(shí),是用的父類A的seeM方法,根據(jù)就近原則,b在調(diào)用seeM方法時(shí)是使用的A.m的-10
//所以,b通過(guò)seeM()方法看到的是m是a的m
}
}

判斷成員變量的方法\技巧其實(shí)很簡(jiǎn)單:
只需要:
確定當(dāng)前這個(gè)類 調(diào)用的成員方法 是先找誰(shuí)?
=>如果先找父類,找就完事了
=>如果先在子類,子類找到了要用的方法,那就用;
如果沒(méi)找到,還要去父類里面去找要用到的方法,注意,這時(shí)就要使用就近原則了
所以,關(guān)鍵有二:
一,確定先找誰(shuí)?先找父類還是先在子類
eg:以上面的題為例:
B b = new B();//先找子類B, 子類 方法找完還 沒(méi)找到 時(shí),還要去 父類 里面找
A a = b;//注意這種 : 還是 先找 子類B, 子類 方法找完還 沒(méi)找到 時(shí),還要去 父類 里面找
A a = new A();//這個(gè)時(shí)候,先找 父類A,但 父類 方法找完還沒(méi)找到時(shí),不會(huì)再找 子類 了!
二,當(dāng)從子類B找到父類A時(shí),注意:要用到就近原則
到此這篇關(guān)于java多態(tài)中的就近原則介紹的文章就介紹到這了,更多相關(guān)java多態(tài)就近原則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java使用poi-tl1.9.1生成Word文檔的技巧分享
本文將簡(jiǎn)單介紹poi-tl的相關(guān)知識(shí),通過(guò)一個(gè)實(shí)際的案例實(shí)踐,充分介紹如何利用poi-tl進(jìn)行目標(biāo)文檔的生成,同時(shí)分享幾個(gè)不同的office版本如何進(jìn)行圖表生成的解決方案,需要的朋友可以參考下2023-09-09
Java編寫網(wǎng)絡(luò)聊天程序?qū)嶒?yàn)
這篇文章主要為大家詳細(xì)介紹了Java編寫網(wǎng)絡(luò)聊天程序?qū)嶒?yàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
ArrayList和JSONArray邊遍歷邊刪除到底該如何做
這篇文章主要介紹了ArrayList和JSONArray邊遍歷邊刪除到底該如何做,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
Java兩種動(dòng)態(tài)代理JDK動(dòng)態(tài)代理和CGLIB動(dòng)態(tài)代理詳解
這篇文章主要介紹了Java兩種動(dòng)態(tài)代理JDK動(dòng)態(tài)代理和CGLIB動(dòng)態(tài)代理詳解,代理模式是23種設(shè)計(jì)模式的一種,他是指一個(gè)對(duì)象A通過(guò)持有另一個(gè)對(duì)象B,可以具有B同樣的行為的模式,為了對(duì)外開(kāi)放協(xié)議,B往往實(shí)現(xiàn)了一個(gè)接口,A也會(huì)去實(shí)現(xiàn)接口,需要的朋友可以參考下2023-11-11
Eclipse添加xml文件提示及Hibernate配置學(xué)習(xí)
文件提示功能在開(kāi)發(fā)過(guò)程中很實(shí)用的,本文實(shí)現(xiàn)了一個(gè)Eclipse添加xml文件提示,感興趣的朋友可以了解下啊,希望本文對(duì)你有所幫助2013-01-01
Java前后端的JSON傳輸方式(前后端JSON格式轉(zhuǎn)換)
這篇文章主要介紹了Java前后端的JSON傳輸方式(前后端JSON格式轉(zhuǎn)換),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04

