成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java中方法的重寫與成員變量的隱藏

開發 開發工具 后端
這篇文章討論了Java面向對象概念中一個基本的概念–Field Hiding(隱藏成員變量)

[[205432]]

這篇文章討論了Java面向對象概念中一個基本的概念–Field Hiding(隱藏成員變量)

在討論這個問題之前,我們看一段特別特別簡單的代碼,請問一下方法的數據結果是什么?

  1. /** 
  2.  * @author Hollis 17/9/27. 
  3.  */ 
  4. public class FieldOverriding { 
  5.  
  6.     public static void main(String[] args) { 
  7.         Sub c1 = new Sub(); 
  8.         System.out.println(" c1.s : " + c1.s); 
  9.         System.out.println(" c1.say : " + c1.say()); 
  10.  
  11.         Super c2 = new Sub(); 
  12.         System.out.println(" c2.s : " + c2.s); 
  13.         System.out.println(" c2.say : " + c2.say()); 
  14.     } 
  15.  
  16. class Super { 
  17.     String s = "Super"
  18.  
  19.     String say(){ 
  20.         return "hello Super"
  21.     } 
  22.  
  23. class Sub extends Super { 
  24.     String s = "Sub"
  25.  
  26.     String say(){ 
  27.         return "hello Sub"
  28.     } 

輸出結果:

  1. c1.s : Sub 
  2.  c1.say : hello Sub 
  3.  c2.s : Super 
  4.  c2.say : hello Sub 

和你想的一樣嗎,如果一樣的話,那就不用繼續往下看了。因為這個本來就不難,知道了就行。

Java中的重寫

在深入理解Java中的重寫和重載中我們介紹過:

在Java的子類與父類中有兩個名稱、參數列表都相同的方法的情況。由于他們具有相同的方法簽名,所以子類中的新方法將覆蓋父類中原有的方法。

正式因為Java在繼承中有方法的重寫,所以,這也體現了Java的動態多態性。

成員變量在Java中能夠被重寫么?

上面的Java的重寫介紹中明確的說了,重寫,指的是方法。并沒有提到成員變量。通過上面的例子,其實我們也可以發現,成員變量并沒有被重寫。

所以,Java中,成員變量并不會被重寫。這里就有另外一個詞:隱藏。

Java中成員變量的隱藏

Java文檔中對隱藏域的定義:

Within a class, a field that has the same name as a field in the superclass hides the superclass’s field, even if their types are different. Within the subclass, the field in the superclass cannot be referenced by its simple name. Instead, the field must be accessed through super. Generally speaking, we don’t recommend hiding fields as it makes code difficult to read.

翻譯成中文:

在一個類中,子類中的成員變量如果和父類中的成員變量同名,那么即使他們類型不一樣,只要名字一樣。父類中的成員變量都會被隱藏。在子類中,父類的成員變量不能被簡單的用引用來訪問。而是,必須從父類的引用獲得父類被隱藏的成員變量,一般來說,我們不推薦隱藏成員變量,因為這樣會使代碼變得難以閱讀。

其實,簡單來說,就是子類不會去重寫覆蓋父類的成員變量,所以成員變量的訪問不能像方法一樣使用多態去訪問。

如何訪問被隱藏的成員變量

其實,通過前面的例子,和剛剛關于成員變量的介紹,其實你已經知道了如何訪問被隱藏的成員變量。 就是使用父類的引用來訪問成員變量,如Super c2 = new Sub(); System.out.println(" c2.s : " + c2.s);。或者使用System.out.println(((Super)c1).s);。

 【本文是51CTO專欄作者Hollis的原創文章,作者微信公眾號Hollis(ID:hollischuang)】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2023-08-08 08:01:52

Java程序變量

2023-05-29 08:32:40

JAVA重寫重載

2009-08-28 15:28:22

C# overridenew隱藏

2015-10-30 09:51:19

Java重寫初始化隱患

2009-05-26 09:31:00

C++重載覆蓋

2012-04-10 11:07:41

Java

2011-11-23 10:59:18

Javafinal

2010-07-13 14:38:33

Perl面向對象編程

2012-11-20 12:38:29

2023-10-07 15:53:05

C/C++靜態變量內存

2016-12-26 09:23:18

C++函數覆蓋

2010-03-09 14:12:55

Python全局變量

2021-07-27 05:32:22

CSS 技巧方位與順序

2009-08-25 17:15:50

C#隱藏C#重寫C#重載

2012-04-09 13:43:12

Java

2010-03-17 16:54:10

Java sum傳遞

2024-01-04 07:49:00

Go語言方法

2009-09-08 13:52:54

CheckBox選中

2013-06-05 11:21:26

2021-03-18 23:38:26

EqualsHashcode方法
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 人人澡人人射 | 2018国产大陆天天弄 | www成人免费视频 | 欧美 日韩 亚洲91麻豆精品 | www国产成人免费观看视频,深夜成人网 | 婷婷久久精品一区二区 | 日韩三级在线观看 | 国产精品美女在线观看 | 久久久久久免费免费 | 人人做人人澡人人爽欧美 | 亚洲中午字幕 | 国产精品久久久久久久久久免费看 | 亚洲狠狠 | 国产精品久久欧美久久一区 | 国产一级淫片a直接免费看 免费a网站 | 欧美精品一区在线发布 | 91精品国产乱码久久久久久久久 | 亚洲精品中文在线 | 午夜手机在线视频 | 国产精品国产三级国产播12软件 | www.97zyz.com| 成人做爰www免费看 午夜精品久久久久久久久久久久 | 成人片网址 | 91视频在线 | 日本人和亚洲人zjzjhd | 色资源在线观看 | 亚洲精品一区二区三区四区高清 | 亚洲三级在线 | 久久国产精99精产国高潮 | 国产精品中文字幕一区二区三区 | 久国久产久精永久网页 | 午夜免费 | 国产精品1区 | 一区二区三区福利视频 | 国产精品不卡视频 | 99成人精品 | 国产精品mv在线观看 | 亚洲精品一区在线观看 | 婷婷五月色综合 | 成人亚洲综合 | 国外激情av |