一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 區分Java的方法覆蓋與變量覆蓋

區分Java的方法覆蓋與變量覆蓋

2020-01-05 15:03lijiao JAVA教程

作為初學者2個比較容易出錯的定義,方法覆蓋和變量覆蓋。下面我們一起來看看作者如何去探討Java的方法覆蓋和變量覆蓋。

首先,我們看看關于重載,和覆蓋(重寫)的簡明定義:

方法重載:如果有兩個方法的方法名相同,但參數不一致,哪么可以說一個方法是另一個方法的重載。

方法覆蓋:如果在子類中定義一個方法,其名稱、返回類型及參數簽名正好與父類中某個方法的名稱、返回類型及參數簽名相匹配,那么可以說,子類的方法覆蓋了父類的方法

我們重點說說覆蓋問題,以如下代碼為例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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方法成功覆蓋了父類的方法

我們再來看看變量的覆蓋:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
 
 }

通過運行結果我發現:變量的覆蓋實際上與方法的不盡相同。

用我自己的話說:變量的覆蓋最多只能算是半吊子的覆蓋。

要不然,向上轉換與不會發生數據丟失現象

?
1
2
People pp=new Student();
System.out.println(pp.name);//運行結果為people

就我個人的經驗來說:變量的覆蓋很容易讓人犯錯誤.讓人感覺又回到了C++的繼承[這里不是指C++帶virtual的繼承]

最后我們再來看一段代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
 
 }

顯然,如此的覆蓋,才是對我們更有用的覆蓋,因為這樣才能達到:把具體對象抽象為一般對象的目的,實同多態性

以上只是我個人的看法,有不對的地方歡迎指出來討論。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 97网站| 亚洲国产99在线精品一区二区 | 成人男女网免费 | 女人c交zzzooo在线观看 | 国产精品香蕉在线观看不卡 | 我们中文在线观看免费完整版 | 精品福利一区二区免费视频 | 香蕉久久夜色精品国产小优 | 边摸边吃奶边做爽视频免费 | 98色花堂永久地址国产精品 | 国产福利在线观看91精品 | 国内久久精品视频 | 久久er99热精品一区二区 | 99精品视频只99有精品 | 日韩一区二区三区精品 | 能免费观看的韩剧 | 国产高清久久 | 艾秋麻豆果冻剧传媒在线播放 | 日本免费不卡在线一区二区三区 | 亚洲欧美激情日韩在线 | 天天碰夜夜操 | 啊啊啊好大视频 | 369看片网| 久久天堂成人影院 | 国产精品久久久久jk制服 | 免费看打屁股视频的软件 | 日韩视频第二页 | 99成人国产精品视频 | 日韩欧美一区二区三区 | 第一福利在线观看永久视频 | 丝袜老师好湿好紧我要进去了 | 精品无人区麻豆乱码无限制 | 精品无人区麻豆乱码无限制 | 调教禽兽| 风间由美在线播放 | 亚洲AV精品无码喷水直播间 | 99久久中文字幕伊人 | 我半夜摸妺妺的奶C了她 | 四虎影院精品 | 日韩毛片基地一区二区三区 | 东京道一本热大交乱 |