亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Java中final修飾的方法是否可以被重寫示例詳解

瀏覽:33日期:2022-08-21 15:31:51

這是一次阿里面試里被問到的題目,在我的印象中,final修飾的方法是不能被子類重寫的。如果在子類中重寫final修飾的方法,在編譯階段就會提示Error。但是回答的時候還是有點心虛的,因為final變量就可以用反射的方法進行修改,我也不太確定是否有類似的機制可以繞過編譯器的限制。于是面試之后特地上網(wǎng)搜了下這個問題,這里簡單記錄一下。

首先說一下結論:沒有辦法能夠做到重寫一個final修飾的方法,但是有其他的方法可以接近在子類中重新實現(xiàn)final方法并在運行時的動態(tài)綁定的效果。

這里需要用到一個aop框架叫aspectj,它和spring aop都是比較常用的aop框架。區(qū)別是spring aop是基于動態(tài)代理的,而aspectj有獨立的編譯器可以實現(xiàn)靜態(tài)代理。關于aspectj的安裝配置網(wǎng)上有很多文章了,這里就不再贅述,直接快進到例子。

首先定義一個SuperClass并在其中定義一個final方法。

SuperClass.java

public class SuperClass { public final void doSomething() { System.out.println('super class do something'); } public static void main(String[] args) { SuperClass instance = new SubClass(); //此處是父類引用和子類對象 instance.doSomething(); }}

SubClass.java

public class SubClass extends SuperClass { //doSomething是final方法,無法被重寫}

super class do something

Process finished with exit code 0

運行main方法,SubClass繼承了doSomething方法,但是不能重寫,所以通常情況下調(diào)用的一定是SuperClass的doSomething方法。

在SubClass中實現(xiàn)“重寫”的doSomething方法

SubClass.java

public class SubClass extends SuperClass { //doSomething是final方法,無法被重寫 //子類只能在另一個函數(shù)中實現(xiàn)重寫的邏輯 protected void overrideDoSomething() { System.out.println('sub class do something'); }}

利用環(huán)繞通知修改實際調(diào)用的方法

DoSomethingAspect.aj

public aspect DoSomethingAsepct { // 環(huán)繞通知 匹配SuperClass類的doSomething方法 void around() : execution(* SuperClass.doSomething()) { if (thisJoinPoint.getThis() instanceof SubClass) { //調(diào)用子類方法 ((SubClass)thisJoinPoint.getThis()).overrideDoSomething(); } else { //調(diào)用原方法 proceed(); } }}

運行結果

sub class do something

Process finished with exit code 0

可以看到,調(diào)用SubClass的doSomething方法時實際調(diào)用的是SubClass類的overrideDoSomething方法,而如果是SuperClass對象的話調(diào)用的又是SuperClass里的doSomething方法。根據(jù)實際的類型決定調(diào)用的方法,就比較接近動態(tài)綁定的機制了。而僅從調(diào)用的代碼來看和子類重寫方法(雖然實際是final)的效果是一樣的。

總結

到此這篇關于Java中final修飾的方法是否可以被重寫的文章就介紹到這了,更多相關Java中final修飾的方法被重寫內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Java
相關文章:
主站蜘蛛池模板: 1000部末满18在线观看黄 | 欧美一级性视频 | 91成品视频 | 国产免费爽爽视频免费可以看 | 巨大巨粗巨长 黑人长吊视频 | 婷婷在线成人免费观看搜索 | 亚洲xx在线| 亚洲第一视频在线观看 | 国产精品视频区 | 人与牲动交bbbbxxxx | 亚洲精品欧美精品日韩精品 | 免费黄色欧美 | 一本色道久久88亚洲综合 | 蜜桃臀久久伊人福利 | 日韩精品一二三区 | 综合网在线视频 | 人人舔人人插 | 高清一级毛片免免费看 | 亚洲一区视频在线播放 | 黄色欧美| 亚洲 欧美 国产 中文 | 天天爽影院一区二区在线影院 | 国产成人经典三级在线观看 | 国产免费一级高清淫日本片 | 麻豆国内精品欧美在线 | 日本一视频一区视频二区 | 久久久久夜色精品波多野结衣 | 羞羞影院免费观看网址在线 | 午夜狠狠操 | 狠狠色婷婷 | 成人免费黄色片 | 小明看看免费 | 真人特级毛片免费视频 | 精品久久网站 | 精品三级三级三级三级三级 | 奇米网狠狠网 | 国产在线看不卡一区二区 | 嫩模被xxxx视频在线观看 | 土耳其毛片 | 欧美一级高清毛片aaa | 91粉色视频在线观看 |