电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

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

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

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

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

首先定義一個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方法,但是不能重寫,所以通常情況下調用的一定是SuperClass的doSomething方法。

在SubClass中實現“重寫”的doSomething方法

SubClass.java

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

利用環繞通知修改實際調用的方法

DoSomethingAspect.aj

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

運行結果

sub class do something

Process finished with exit code 0

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

總結

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

標簽: Java
相關文章:
主站蜘蛛池模板: 网站建设-高端品牌网站设计制作一站式定制_杭州APP/微信小程序开发运营-鼎易科技 | 成都办公室装修-办公室设计-写字楼装修设计-厂房装修-四川和信建筑装饰工程有限公司 | 磁力抛光研磨机_超声波清洗机厂家_去毛刺设备-中锐达数控 | 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 申江储气罐厂家,储气罐批发价格,储气罐规格-上海申江压力容器有限公司(厂) | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 定做大型恒温循环水浴槽-工业用不锈钢恒温水箱-大容量低温恒温水槽-常州精达仪器 | 楼承板设备-楼承板成型机-免浇筑楼承板机器厂家-捡来 | 上海诺狮景观规划设计有限公司| 产业规划_产业园区规划-产业投资选址及规划招商托管一体化服务商-中机院产业园区规划网 | 世纪豪门官网 世纪豪门集成吊顶加盟电话 世纪豪门售后电话 | 高温链条油|高温润滑脂|轴承润滑脂|机器人保养用油|干膜润滑剂-东莞卓越化学 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 房在线-免费房产管理系统软件-二手房中介房屋房源管理系统软件 | 楼梯定制_楼梯设计施工厂家_楼梯扶手安装制作-北京凌步楼梯 | 儿童乐园|游乐场|淘气堡招商加盟|室内儿童游乐园配套设备|生产厂家|开心哈乐儿童乐园 | 低合金板|安阳低合金板|河南低合金板|高强度板|桥梁板_安阳润兴 北京租车牌|京牌指标租赁|小客车指标出租 | 电磁流量计_智能防腐防爆管道式计量表-金湖凯铭仪表有限公司 | 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 物流之家新闻网-最新物流新闻|物流资讯|物流政策|物流网-匡匡奈斯物流科技 | 航空障碍灯_高中低光强航空障碍灯_民航许可认证航空警示灯厂家-东莞市天翔航天科技有限公司 | 诚暄电子公司首页-线路板打样,pcb线路板打样加工制作厂家 | IHDW_TOSOKU_NEMICON_EHDW系列电子手轮,HC1系列电子手轮-上海莆林电子设备有限公司 | 深圳诚暄fpc首页-柔性线路板,fpc柔性线路板打样生产厂家 | 破碎机锤头_合金耐磨锤头_郑州宇耐机械工程技术有限公司 | 量子管通环-自清洗过滤器-全自动反冲洗过滤器-沼河浸过滤器 | 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 锥形螺带干燥机(新型耙式干燥机)百科-常州丰能干燥工程 | 临朐空调移机_空调维修「空调回收」临朐二手空调 | 合同书格式和范文_合同书样本模板_电子版合同,找范文吧 | 高柔性拖链电缆-聚氨酯卷筒电缆-柔性屏蔽电缆厂家-玖泰电缆 | 威廉希尔WilliamHill·足球(中国)体育官方网站 | 超声波反应釜【百科】-以马内利仪器 | _网名词典_网名大全_qq网名_情侣网名_个性网名 | 国标白水泥,高标号白水泥,白水泥厂家-淄博华雪建材有限公司 | 路斯特伺服驱动器维修,伦茨伺服驱动器维修|万骏自动化百科 | 英国雷迪地下管线探测仪-雷迪RD8100管线仪-多功能数字听漏仪-北京迪瑞进创科技有限公司 | 12cr1mov无缝钢管切割-15crmog无缝钢管切割-40cr无缝钢管切割-42crmo无缝钢管切割-Q345B无缝钢管切割-45#无缝钢管切割 - 聊城宽达钢管有限公司 | 发光字|标识设计|标牌制作|精神堡垒 - 江苏苏通广告有限公司 | 南方珠江-南方一线电缆-南方珠江科技电缆-南方珠江科技有限公司 南汇8424西瓜_南汇玉菇甜瓜-南汇水蜜桃价格 | 钛合金标准件-钛合金螺丝-钛管件-钛合金棒-钛合金板-钛合金锻件-宝鸡远航钛业有限公司 |