Java中final方法能否被重写?请举例说明。

2026-05-16 00:430阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计637个文字,预计阅读时间需要3分钟。

Java中final方法能否被重写?请举例说明。

在这次面试中,我被问到的一个问题是关于final修饰符的使用。在我的印象中,final修饰的方法是不能被子类重写的。如果在子类中重写final修饰的方法,编译阶段就会报错。尽管如此,回答问题时我还是感到有些不确定。

这是一次阿里面试里被问到的题目,在我的印象中,final修饰的方法是不能被子类重写的。如果在子类中重写final修饰的方法,在编译阶段就会提示Error。但是回答的时候还是有点心虚的,因为final变量就可以用反射的方法进行修改,我也不太确定是否有类似的机制可以绕过编译器的限制。于是面试之后特地上网搜了下这个问题,这里简单记录一下。

首先说一下结论:没有办法能够做到重写一个final修饰的方法,但是有其他的方法可以接近在子类中重新实现final方法并在运行时的动态绑定的效果。

这里需要用到一个aop框架叫aspectj,它和spring aop都是比较常用的aop框架。区别是spring aop是基于动态代理的,而aspectj有独立的编译器可以实现静态代理。关于aspectj的安装配置网上有很多文章了,这里就不再赘述,直接快进到例子。

首先定义一个SuperClass并在其中定义一个final方法。

阅读全文

本文共计637个文字,预计阅读时间需要3分钟。

Java中final方法能否被重写?请举例说明。

在这次面试中,我被问到的一个问题是关于final修饰符的使用。在我的印象中,final修饰的方法是不能被子类重写的。如果在子类中重写final修饰的方法,编译阶段就会报错。尽管如此,回答问题时我还是感到有些不确定。

这是一次阿里面试里被问到的题目,在我的印象中,final修饰的方法是不能被子类重写的。如果在子类中重写final修饰的方法,在编译阶段就会提示Error。但是回答的时候还是有点心虚的,因为final变量就可以用反射的方法进行修改,我也不太确定是否有类似的机制可以绕过编译器的限制。于是面试之后特地上网搜了下这个问题,这里简单记录一下。

首先说一下结论:没有办法能够做到重写一个final修饰的方法,但是有其他的方法可以接近在子类中重新实现final方法并在运行时的动态绑定的效果。

这里需要用到一个aop框架叫aspectj,它和spring aop都是比较常用的aop框架。区别是spring aop是基于动态代理的,而aspectj有独立的编译器可以实现静态代理。关于aspectj的安装配置网上有很多文章了,这里就不再赘述,直接快进到例子。

首先定义一个SuperClass并在其中定义一个final方法。

阅读全文