色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 方法和變量在繼承時的覆蓋和隱藏問題

方法和變量在繼承時的覆蓋和隱藏問題 時間:2018-09-21      來源:未知

近有個同學問了我一個小問題,覺得很有意思,之前一直沒有想到過。他說“java中存在方法覆蓋,是否存在變量的覆蓋呢?”。我們知道,在java中,子類可以繼承父類,如果子類聲明的方法與父類有重名,這時就發生了方法覆蓋。其實,這實際上這又分為兩種情況,就是方法和變量在繼承時的覆蓋和隱藏問題,這些概念性的東西看似無聊,但是在面試中還是比較常見的,所以這里來討論下

首先我們來看幾個概念

隱藏 :子類隱藏了父類的變量和方法,那么,子類不能訪問父類被隱藏的變量或者方法,但是,將子類轉換成父類,可以訪問父類被隱藏的變量或者方法

覆蓋 :子類覆蓋了父類的變量或者方法,那么,子類不能訪問父類被覆蓋的變量或者方法,將子類轉換成父類后同樣不能訪問父類被覆蓋的變量或者方法

首先看一下JAVA中方法和變量在繼承時的覆蓋和隱藏規則

1.父類的實例變量和靜態變量能被子類的同名變量隱藏

2.父類的靜態方法被子類的同名靜態方法隱藏

3.父類的實例方法被子類的同名實例變量覆蓋

還有幾點需要注意的是

1.不能用子類的靜態方法隱藏 父類中同樣標示(也就是返回值 名字 參數都一樣)的實例方法

2.不能用子類的實例方法覆蓋 父類中同樣標示的靜態方法

3.這點兒請注意,就是變量只會被隱藏 不會被覆蓋 ,無論他是實例變量還是靜態變量,而且,子類的靜態變量可以隱藏 父類的實例變量,子類的實例變量可以隱藏 父類的靜態變量

創建兩個父子類關系的類

Java代碼

//父類

class Parent

{

public static String kind="cn.com.farsight.parent";

public static int age=50;

public String name="Parent";

//靜態方法,返回包名

public static String getKind()

{

System.out.println("parent的getKind()方法被調用了");

return kind;

}

//靜態方法,返回年齡

public static int getAge()

{

System.out.println("Parent的getAge()方法被調用了");

return age;

}

//實例方法,返回姓名

public String getName()

{

System.out.println("Parent的getName()方法被調用了");

return this.name;

}

}

//子類

class Child extends Parent

{

public static String kind="cn.com.farsight.child";

public int age=25;

public String name="child";

//隱藏父類靜態方法

public static String getKind()

{

System.out.println("child的getkind()方法被調用了");

return kind;

}

//獲取父類包名

public static String getParentKind()

{

return Parent.kind;

}

//覆蓋父類實例方法

public String getName()

{

System.out.println("child的getName()被調用了");

return this.name;

}

//獲取父類名稱

public String getParentName()

{

return super.name;

}

/*

*錯誤,實例方法不能覆蓋父類的靜態方法

public int getAge()

{

return this.age;

}

*/

}

class TestDemo

{

public static void main(String[] args)

{

Child child=new Child();

System.out.printf("子類名稱:%s,年齡:%d,包名:%s%n",child.name,child.age,child.kind);

//輸出:子類名稱:child,年齡:25,包:cn.com.farsight.child

//把child轉換成parent對象

Parent parent=child;

System.out.printf("轉換后的名稱:%s,年齡:%d,包名:%s%n",parent.name,parent.age,parent.kind);

//輸出:轉換后的名稱:Parent,年齡:50,包:cn.com.farsight.parent

System.out.printf("子類訪問父類被隱藏的實例變量name:%s%n",child.getParentName());

//輸出:子類訪問父類被隱藏的實例變量name:Parent

System.out.printf("子類訪問父類被隱藏的靜態變量kind:%s",child.getParentKind());

//輸出:子類訪問父類被隱藏的靜態變量kind:cn.com.farsight.parent

child.getName();

//輸出:child的getName()被調用了

//**************注意看這個方法,返回的還是子類的getName

parent.getName();

//輸出:child的getName()被調用了

child.getKind();

//輸出:child的getkind()方法被調用了

parent.getKind();

//輸出:parent的getKind()方法被調用了

}

}

總結:

1.同名的實例方法被覆蓋 ,同名的靜態方法被隱藏 ,child類的getName實例方法覆蓋 了parent的getName實例方法,chind的getKind方法隱藏了parent類的getKind方法

2.隱藏和覆蓋的區別在于,子類對象轉換成父類對象后,能夠訪問父類被隱藏 的變量和方法,而不能訪問父類被覆蓋的方法

3.如果需要訪問父類被隱藏的實例變量,加上super就好了,比如訪問父類name,使用super.name

上一篇:STM32F407和STM32F051主從I2C通信

下一篇:關于使用stm32cubemx生成代碼后移植Ucos—III的方法

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区
主站蜘蛛池模板: 国产欧美一区二区三区在线看| 亚洲free嫩bbb| 在线精品高清中文字幕| 日本精品免费观看| 美乳少妇欧美精品| 亚洲精品电影在线| 日韩免费不卡av| 欧美日韩福利视频| 亚洲性无码av在线| 国产免费一区二区三区香蕉精| 欧美日韩一区二区三区| 亚洲视频第一页| 国产精品中文久久久久久久| 欧美黄色免费网站| 日韩小视频在线| 日韩国产高清视频在线| 国产高清在线不卡| 欧美日韩免费在线| 最新的欧美黄色| 91精品视频免费看| 欧美孕妇毛茸茸xxxx| 欧美大荫蒂xxx| 欧美成人高清视频| 中文字幕日韩精品在线观看| 亚洲国产成人av在线| 欧美在线性爱视频| 国内精品模特av私拍在线观看| 精品国产一区二区三区四区在线观看 | 国产欧美精品xxxx另类| 国内精久久久久久久久久人| 久久国产精品视频| www.久久草.com| 在线观看精品国产视频| 日韩激情av在线免费观看| 成人福利视频网| 国产精品视频最多的网站| 奇门遁甲1982国语版免费观看高清 | 国产玖玖精品视频| 欧美亚洲激情视频| 91极品视频在线| 性欧美办公室18xxxxhd|