java多態(tài)中的就近原則介紹
直接上題:
題目補充:
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沒有再找A,找A的時候,就要注意:就近原則了 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)建對象的方法,還是先找B,B沒有再找A,找A的時候,就要注意:就近原則了 //此刻,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始終調用重寫后的getM()方法 System.out.println("a.getM():"+a.getM());//b.getM()是20,后來把b賦給a,a也成了20 20 //b調用的getM()方法是重寫之后的getM()方法,所以是10+10 System.out.println("a.seeM():"+a.seeM()); System.out.println("b.seeM():"+b.seeM());//此時不管是a的m還是b的m都是-10 -10 System.out.println("a.m:"+a.m+" b.m:"+b.m); System.out.println("a.getM():"+a.getM()); //因為b自己沒有seeM方法,所以b在使用seeM方法時,是用的父類A的seeM方法,根據就近原則,b在調用seeM方法時是使用的A.m的-10 //所以,b通過seeM()方法看到的是m是a的m } }
判斷成員變量的方法\技巧其實很簡單:
只需要:
確定當前這個類 調用的成員方法 是先找誰?
=>如果先找父類,找就完事了
=>如果先在子類,子類找到了要用的方法,那就用;
如果沒找到,還要去父類里面去找要用到的方法,注意,這時就要使用就近原則了
所以,關鍵有二:
一,確定先找誰?先找父類還是先在子類
eg:以上面的題為例:
B b = new B();//先找子類B, 子類 方法找完還 沒找到 時,還要去 父類 里面找
A a = b;//注意這種 : 還是 先找 子類B, 子類 方法找完還 沒找到 時,還要去 父類 里面找
A a = new A();//這個時候,先找 父類A,但 父類 方法找完還沒找到時,不會再找 子類 了!
二,當從子類B找到父類A時,注意:要用到就近原則
到此這篇關于java多態(tài)中的就近原則介紹的文章就介紹到這了,更多相關java多態(tài)就近原則內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java使用poi-tl1.9.1生成Word文檔的技巧分享
本文將簡單介紹poi-tl的相關知識,通過一個實際的案例實踐,充分介紹如何利用poi-tl進行目標文檔的生成,同時分享幾個不同的office版本如何進行圖表生成的解決方案,需要的朋友可以參考下2023-09-09ArrayList和JSONArray邊遍歷邊刪除到底該如何做
這篇文章主要介紹了ArrayList和JSONArray邊遍歷邊刪除到底該如何做,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12Java兩種動態(tài)代理JDK動態(tài)代理和CGLIB動態(tài)代理詳解
這篇文章主要介紹了Java兩種動態(tài)代理JDK動態(tài)代理和CGLIB動態(tài)代理詳解,代理模式是23種設計模式的一種,他是指一個對象A通過持有另一個對象B,可以具有B同樣的行為的模式,為了對外開放協(xié)議,B往往實現了一個接口,A也會去實現接口,需要的朋友可以參考下2023-11-11Eclipse添加xml文件提示及Hibernate配置學習
文件提示功能在開發(fā)過程中很實用的,本文實現了一個Eclipse添加xml文件提示,感興趣的朋友可以了解下啊,希望本文對你有所幫助2013-01-01