Java 匿名类部类

本文介绍了Java中的@Override注解,用于标记重写方法,帮助开发者避免误将重写写成重载。讲解了重载和重写的区别,重载关注方法名、参数列表,而重写关注方法名、参数列表和返回类型的一致性。通过一个TimerTask的例子展示了匿名类部类的使用,说明了如何通过匿名类创建抽象类的实例并提供方法实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java se5新增加@Override,它不是一个关键字(有人说它是伪代码),也可以当作关键字使用。常见在实现接口的方法上。当需要重写(覆写)的时候,可以选择添加這个annotate。這个annotate可以检查你是否重写正确,因为有时候我们可能会把重写误写成重载了。此时编译器就回提示一条错误信息。
重载: 重载的时候,方法名要一样。但是参数类型,参数个数不一样,返回值可以相同也可以不相同。返回值是不能作为区别重载函数。
重写/覆写:若子类中的某一方法和父类中的某一个方法具有相同的方法名,参数列表,返回参数。则子类的新方法将覆盖父类的方法
分析下面一段代码:

public static TimerTask loginLog(final Long userId, final String ip) {
        return new TimerTask() {
            @Override
            public void run() {
                try {
                    LoginLog loginLog = LogFactory.createLoginLog(LogType.LOGIN, userId, null, ip);
                    loginLogMapper.insert(loginLog);
                } catch (Exception e) {
                    logger.error("创建登录日志异常!", e);
                }
            }
        };
    }

首先我们来看一下TimerTask這个类:
在这里插入图片描述
可见這个类是一个抽象类,抽象类是不能直接new的,必须有实现类,才能new出它的实现类。

new TimerTask() {}

看到這句话一定有疑问吧,一般来说,new一个对象是小括号后是一个分号结束。這句话后面有一对花括号,肯定别有意义了。后面跟上花括号,表示new的是一个匿名类部类。花括号中是该new出对象的具体实现方法。new TimerTask() {}這个就是一个匿名类部类。
這个类部类还可以这样写:

class SonOne extends TimerTask{
            @Override
            public void run() {
                try {
                    LoginLog loginLog = LogFactory.createLoginLog(LogType.LOGIN, userId, null, ip);
                    loginLogMapper.insert(loginLog);
                } catch (Exception e) {
                    logger.error("创建登录日志异常!", e);
                }
            }
        }
return new SonOne();

一样的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值