辨別Java的辦法籠罩與變量籠罩。本站提示廣大學習愛好者:(辨別Java的辦法籠罩與變量籠罩)文章只能為提供參考,不一定能成為您想要的結果。以下是辨別Java的辦法籠罩與變量籠罩正文
起首,我們看看關於重載,和籠罩(重寫)的簡明界說:
辦法重載:假如有兩個辦法的辦法名雷同,但參數紛歧致,哪麼可以說一個辦法是另外一個辦法的重載。
辦法籠罩:假如在子類中界說一個辦法,其稱號、前往類型及參數簽名正好與父類中某個辦法的稱號、前往類型及參數簽名相婚配,那末可以說,子類的辦法籠罩了父類的辦法
我們重點說說籠罩成績,以以下代碼為例:
public class People { public String getName() { return "people"; } } public class Student extends People { public String getName() { return "student"; } } public static void main(String[] args) { People p=new People(); System.out.println(p.getName());//運轉成果為people Student s=new Student(); System.out.println(s.getName());//運轉成果為student People pp=new Student(); System.out.println(pp.getName());//運轉成果為student }
上述成果解釋:student類的getName辦法勝利籠罩了父類的辦法
我們再來看看變量的籠罩:
public class People { protected String name="people"; } public class Student extends People { protected String name="student"; } public static void main(String[] args) { People p=new People(); System.out.println(p.name);//運轉成果為people Student s=new Student(); System.out.println(s.name);//運轉成果為student People pp=new Student(); System.out.println(pp.name);//運轉成果為people }
經由過程運轉成果我發明:變量的籠罩現實上與辦法的不盡雷同。
用我本身的話說:變量的籠罩最多只能算是半吊子的籠罩。
要否則,向上轉換與不會產生數據喪失景象
People pp=new Student(); System.out.println(pp.name);//運轉成果為people
就我小我的經歷來講:變量的籠罩很輕易讓人出錯誤.讓人感到又回到了C++的繼續[這裡不是指C++帶virtual的繼續]
最初我們再來看一段代碼:
public class People { protected String name="people"; public String getName() { return name; } } public class Student extends People { protected String name="student"; public String getName() { return name; } } main(String[] args) { People p=new People(); System.out.println(p.getName());//運轉成果為people Student s=new Student(); System.out.println(s.getName());//運轉成果為student People pp=new Student(); System.out.println(pp.getName());//運轉成果為student }
明顯,如斯的籠罩,才是對我們更有效的籠罩,由於如許能力到達:把詳細對象籠統為普通對象的目標,實同多態性
以上只是我小我的意見,有纰謬的處所迎接指出來評論辯論。