JAVA覆盖和重写的区别及说明
更新时间:2025年07月16日 15:12:27 作者:wangshili程序员
非静态方法的覆盖即重写,具有多态性;静态方法无法被覆盖,但可被重写(仅通过类名调用),二者区别在于绑定时机与引用类型关联性
JAVA覆盖和重写的区别
经常听到两种话
- 1.覆盖=重写。
- 2.静态方法可以覆盖但不能重写吗,这两句话听起来挺矛盾的是不是
废话不多说直接上图:
package com.wangshili;
public class Main {
public static void main(String[] args) {
Father f =new Child();//创建子类对象,父类引用
f.print();//调用父类方法
((Child)f).print();//向下转型,调用子类方法
while(true);
}
}
/*
* 重写有多态,调用方法时看对象
*/
class Father{
public void print(){
System.out.println ("这是父类");
}
}
class Child extends Father{
public void print(){
System.out.println ("这是子类");
}
}
package com.wangshili;
public class Test {
public static void main(String[] args) {
Father f =new Child();//创建子类对象,父类引用
f.print();//调用父类方法
((Child)f).print();//向下转型,调用子类方法
while(true);
}
}
/*
* 覆盖没多态,调用方法时看引用类型(静态属于类)
*/
class Father{
public static void print(){
System.out.println ("这是父类");
}
}
class Child extends Father{
public static void print(){
System.out.println ("这是子类");
}
}
认真读完上面两份代码
你应该能发现区别了,我总结下:
1.非静态方法,覆盖=重写,有多态
2.静态方法,是不能重写的,比如你添加@overwrite直接就报错了,我们知道静态属于类,通过类名就可以直接调用该方法,所以这里也是一样,只看引用类型,跟创建对象类型无关。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringBoot 项目添加 MDC 日志链路追踪的执行流程
日志链路追踪就是将一个标志跨线程进行传递,在一般的小项目中也就是在你新起一个线程的时候,或者使用线程池执行任务的时候会用到,比如追踪一个用户请求的完整执行流程,本文给大家介绍SpringBoot MDC 日志链路追踪的代码,感兴趣的朋友一起看看吧2021-06-06
SpringBoot整合RabbitMQ实现延迟队列的示例详解
这篇文章主要为大家详细介绍了SpringBoot如何整合RabbitMQ实现延迟队列,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的可以了解一下2023-04-04
springboot对接第三方微信授权及获取用户的头像和昵称等等
这篇文章主要介绍了springboot对接第三方微信授权及获取用户的头像和昵称等等,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-01-01
Spring Boot配置application.yml及根据application.yml选择启动配置的操作
Spring Boot中可以选择applicant.properties 作为配置文件,也可以通过在application.yml中进行配置,让Spring Boot根据你的选择进行加载启动配置文件,本文给大家介绍Spring Boot配置application.yml及根据application.yml选择启动配置的操作方法,感兴趣的朋友一起看看吧2023-10-10


最新评论