【小家java】关于java中方法重载与方法重写的区别

简介: 【小家java】关于java中方法重载与方法重写的区别

相关阅读

【小家java】java5新特性(简述十大新特性) 重要一跃

【小家java】java6新特性(简述十大新特性) 鸡肋升级

【小家java】java7新特性(简述八大新特性) 不温不火

【小家java】java8新特性(简述十大新特性) 饱受赞誉

【小家java】java9新特性(简述十大新特性) 褒贬不一

【小家java】java10新特性(简述十大新特性) 小步迭代

【小家java】java11新特性(简述八大新特性) 首个重磅LTS版本


1、概述


这篇文章比较轻松,直接讲述一下java当中的方法重载和方法重写的区别。主要面向对象还是初学者,因为初学者经常弄混这两个概念性的问题。


2、栗子


一、重载 overloading,这个在JDK里可没有相关注解哦


方法重载是让类以统一的方式处理不同类型数据的一种手段。重载是一个类中多态性的一种表现。


Java的方法重载,就是可以在类里定义多个同名的方法,但具有不同的参数和不同的定义(不同的参数列表)。调用方法时才决定最终调用哪个方法,这也是多态性的表现。这里推荐大家可以了解一下java当中的重载决策,可以参考我另外一篇博文中有说到过:List 的删除操作,你知道多少?


里面对remove重载解释的时候有介绍到,各位有空可以看看。

比如spring框架中BeanFactory.getBean()方法,就有大量的重载实现:


Object getBean(String name) throws BeansException;
<T> T getBean(String name, Class<T> requiredType) throws BeansException;


重载用得好,也可大大提高你的代码设计的向下兼容能力。


重载的返回值类型可以相同也可以不同


二、重写overriding。强烈建议如果是重写,请加上方法注解:@Override


父类(接口)与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding),@Override并不是必须的,但建议加上保持良好语意,也能静态检查。


若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。


子类函数的访问修饰权限不能少于父类的;

有如下父类方法GenericService.test:

protected Object test(Object id) {
  return null;
}

我们复写可以这么来:

@Override
protected Object test(Object id) {
    return null;
}
//使用public修饰
@Override
public Object test(Object id) {
    return null;
}
//使用final修饰也可以
@Override
public final Object test(Object id) {
    return null;
}
//返回值用子类也行,这里用了user对象(用父类就不行了哟)
@Override
public final User test(Object id) {
    return null;
}
//但不能用private修饰了,因为private小于protected   **下面这个就是错的**
@Override
private User test(Object id) {
    return null;
}


备注:入参必须一模一样,类型也是。但返回值允许返回是父类的子类,访问权限可以比父类高。复写的方法还可额外 static 、final、 native 、 synchronized等修饰


另外,接口中如果存在继承,子接口也是可以@Override父接口的哟,这个在平常使用经常遇到,这样具体子接口就能有更好的语意了。


3、使用场景


处处都有

4、最后


若方法类型为priavte static final ,java采用静态编译,编译器会准确知道该调用哪个方法。因此本人建议,能private的方法尽量不要public,因为JVM能够对private方法进行静态编译,从而大大提高调用效率的。


相关文章
|
2月前
|
前端开发 JavaScript Java
Java 开发中 Swing 界面嵌入浏览器实现方法详解
摘要:Java中嵌入浏览器可通过多种技术实现:1) JCEF框架利用Chromium内核,适合复杂网页;2) JEditorPane组件支持简单HTML显示,但功能有限;3) DJNativeSwing-SWT可内嵌浏览器,需特定内核支持;4) JavaFX WebView结合Swing可完美支持现代网页技术。每种方案各有特点,开发者需根据项目需求选择合适方法,如JCEF适合高性能要求,JEditorPane适合简单展示。(149字)
256 1
|
2月前
|
存储 缓存 人工智能
Java int和Integer的区别
本文介绍了Java中int与Integer的区别及==与equals的比较机制。Integer是int的包装类,支持null值。使用==比较时,int直接比较数值,而Integer比较对象地址;在-128至127范围内的Integer值可缓存,超出该范围或使用new创建时则返回不同对象。equals方法则始终比较实际数值。
|
1月前
|
算法 Java 开发者
Java 项目实战数字华容道与石头迷阵游戏开发详解及实战方法
本文介绍了使用Java实现数字华容道和石头迷阵游戏的技术方案与应用实例,涵盖GUI界面设计、二维数组操作、游戏逻辑控制及自动解法算法(如A*),适合Java开发者学习游戏开发技巧。
184 46
|
27天前
|
Java 测试技术
Java浮点类型详解:使用与区别
Java中的浮点类型主要包括float和double,它们在内存占用、精度范围和使用场景上有显著差异。float占用4字节,提供约6-7位有效数字;double占用8字节,提供约15-16位有效数字。float适合内存敏感或精度要求不高的场景,而double精度更高,是Java默认的浮点类型,推荐在大多数情况下使用。两者都存在精度限制,不能用于需要精确计算的金融领域。比较浮点数时应使用误差范围或BigDecimal类。科学计算和工程计算通常使用double,而金融计算应使用BigDecimal。
388 6
|
2月前
|
Java 索引
Java ArrayList中的常见删除操作及方法详解。
通过这些方法,Java `ArrayList` 提供了灵活而强大的操作来处理元素的移除,这些方法能够满足不同场景下的需求。
345 30
|
2月前
|
安全 Java API
Java 17 及以上版本核心特性在现代开发实践中的深度应用与高效实践方法 Java 开发实践
本项目以“学生成绩管理系统”为例,深入实践Java 17+核心特性与现代开发技术。采用Spring Boot 3.1、WebFlux、R2DBC等构建响应式应用,结合Record类、模式匹配、Stream优化等新特性提升代码质量。涵盖容器化部署(Docker)、自动化测试、性能优化及安全加固,全面展示Java最新技术在实际项目中的应用,助力开发者掌握现代化Java开发方法。
115 1
|
2月前
|
安全 Java API
Java 集合高级应用与实战技巧之高效运用方法及实战案例解析
本课程深入讲解Java集合的高级应用与实战技巧,涵盖Stream API、并行处理、Optional类、现代化Map操作、不可变集合、异步处理及高级排序等核心内容,结合丰富示例,助你掌握Java集合的高效运用,提升代码质量与开发效率。
191 0
|
2月前
|
算法 搜索推荐 Java
Java中的Collections.shuffle()方法及示例
`Collections.shuffle()` 是 Java 中用于随机打乱列表顺序的方法,基于 Fisher-Yates 算法实现,支持原地修改。可选传入自定义 `Random` 对象以实现结果可重复,适用于抽奖、游戏、随机抽样等场景。
93 0
|
2月前
|
安全 Java
JAVA:Collections类的shuffle()方法
`Collections.shuffle()` 是 Java 中用于随机打乱列表顺序的工具方法,适用于洗牌、抽奖等场景。该方法直接修改原列表,支持自定义随机数生成器以实现可重现的打乱顺序。使用时需注意其原地修改特性及非线程安全性。
94 0
|
2月前
|
算法 安全 Java
java中Collections.shuffle方法的功能说明
`Collections.shuffle()` 是 Java 中用于随机打乱列表顺序的方法,基于 Fisher-Yates 算法实现,常用于洗牌、抽奖等场景。可选 `Random` 参数支持固定种子以实现可重复的随机顺序。方法直接修改原列表,无返回值。
95 0

热门文章

最新文章