Java中方法重写与重载的区别

 更新时间:2022年01月21日 10:31:07   作者:大雄有哆啦梦  
大家好,本篇文章主要讲的是Java中方法重写与重载的区别,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下

Java方法重写(Override)与重载(Overload)的区别(超详细)

首页在我们要学习这个知识点之前,应该要先了解什么是多态?

在最初学习java的时候,人们都知道,java这种面向对象的语言,一共有三大特征,分别是:封装、继承、多态。

多态是同一个行为具有多个不同表现形式或形态的能力。

举个例子,比如大多数动物(抽象类)会叫,但是狗(实现类)就是汪汪汪,猫(实现类)就是喵喵喵。

多态实现的必要条件

子类必须继承父类必须有重写父类引用指向子类对象

多态的实现途径

多态的实现途径有三种:重写、重载、接口实现,虽然它们的实现方式不一样,但是核心都是:同一行为的不同表现形式。

在大概了解什么是多态后,接下来就看看Java方法重写(Override)与重载(Overload)

一、重写(Override)

父类与子类之间多态的关系,对父类的函数进行重新定义。如果在子类中定义的某些方法和父类有相同的名称和参数,那么这就是方法被重写了。
但是有时候子类并不想一动不动的继承父类的方法,想做一些修改,这就需要采用方法的重写。
方法的重写体现在子父类当中,最典型的是子类重写父类中的方法.
重写代码如下:

public class Father {
        public void walk(){
            System.out.println("我是父亲");
      }

}

public class Son extends Father {
    @Override//方法重写
    public void walk() {
        System.out.println("我是儿子");
    }
}

方法重写又称为方法覆盖。
如果子类的方法与父类中的某一个方法具有相同的方法名、返回类型和参数列表,则新方法将覆盖原有方法。子类方法的访问修饰权限不能小于父类的。

二、重载(Overload)

多个同名的方法同时存在,具有不同的参数/类型。重载是一个类中多态性的一种表现重载的时候,方法名必须一样,但参数类型和个数不一样,返回值类型可以一样也可以不一样。我们不能以返回值类型作为重载方法的区分标准!!!如果参数类型和个数一样,返回值类型不同是不算重载的.
这种写法会直接报错.因为在调用方法的时候,我们还不知道方法的返回值类型,所以编译器无法区分你调用的是哪个方法。在调用方法时,通过传递给它们不同的参数个数和参数类型来决定去使用哪个对应的方法,这就是多态性。
重载代码如下:

public void eat(){
        System.out.println("我是干饭人" );
    }

//    public int eat(){  会报错
//        return 4;
//    }
    //报错原因:参数类型和个数一样,返回值类型不同是不算重载的
    //因为在调用方法的时候,我们还不知道方法的返回值类型,所以编译器无法区分你调用的是哪个方法。


    public void eat(String name){
        System.out.println("我是干饭人:"+name );
    }

    public void eat(String name,int age){
        System.out.println("我是干饭人:"+name+"我今年"+age );
    }

这里要注意:
重写Override是父类与子类之间多态的关系,而重载Overload是一个类中多态性的表现。

三、总结

方法重载Overload:

1、同一个类中

2、方法名相同,参数列表不同(参数顺序、个数、类型)

3、方法返回值、访问修饰符任意

4、与方法的参数名无关

方法重写Override:

1、有继承关系的子类中

2、方法名相同,参数列表相同(参数顺序、个数、类型),方法返回值相同

3、访问修饰符,访问范围需要大于等于父类的访问范围

4、与方法的参数名无关

到此这篇关于Java中方法重写与重载的区别的文章就介绍到这了,更多相关Java方法重写与重载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java如何加载外部Jar的类并通过反射调用类的方法

    Java如何加载外部Jar的类并通过反射调用类的方法

    这篇文章主要介绍了Java如何加载外部Jar的类并通过反射调用类的方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Java基础之Thymeleaf的简单使用

    Java基础之Thymeleaf的简单使用

    这篇文章主要介绍了Java基础之Thymeleaf的简单使用,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • 详解Spring Security中权限注解的使用

    详解Spring Security中权限注解的使用

    这篇文章主要为大家详细介绍一下Spring Security中权限注解的使用方法,文中的示例代码讲解详细,对我们学习或工作有一定参考价值,需要的可以参考一下
    2022-05-05
  • SpringBoot项目中分页插件PageHelper无效的问题及解决方法

    SpringBoot项目中分页插件PageHelper无效的问题及解决方法

    这篇文章主要介绍了解决SpringBoot项目中分页插件PageHelper无效的问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 使用Java语言实现一个冒泡排序

    使用Java语言实现一个冒泡排序

    冒泡排序也是一种简单直观的排序算法,基本思想是多次遍历要排序的数组,每次比较相邻的元素,如果顺序不对就交换它们的位置,本篇文章将通过IDE使用 Java 语言实现一个冒泡排序,需要的朋友可以参考下
    2024-03-03
  • Spring中的@EnableScheduling定时任务注解

    Spring中的@EnableScheduling定时任务注解

    这篇文章主要介绍了Spring中的@EnableScheduling注解,@EnableScheduling是 Spring Framework 提供的一个注解,用于启用 Spring 的定时任务功能,通过使用这个注解,可以在 Spring 应用程序中创建定时任务,需要的朋友可以参考下
    2024-01-01
  • FreeMarker配置(Configuration)

    FreeMarker配置(Configuration)

    所有与该configuration 对象关联的模版实例都就可以通过获得to_upper 转换器,company 来获得字符串,因此你不需要再一次次的往root 中添加这些变量了。如果你往root 添加同名的变量,那么你新添加的变量将会覆盖之前的共享变量。
    2016-04-04
  • Java开发之HashMap的使用和遍历

    Java开发之HashMap的使用和遍历

    这篇文章主要介绍了Java开发之HashMap的使用和遍历的相关资料,这里提供一个HashMap的简单实例并结合List使用,需要的朋友可以参考下
    2017-08-08
  • SpringBoot中的yaml语法及静态资源访问问题

    SpringBoot中的yaml语法及静态资源访问问题

    这篇文章主要介绍了SpringBoot中的yaml语法及静态资源访问问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • BeanUtils.copyProperties扩展--实现String转Date

    BeanUtils.copyProperties扩展--实现String转Date

    这篇文章主要介绍了BeanUtils.copyProperties扩展--实现String转Date操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论