重载和重写有什么区别

这篇具有很好参考价值的文章主要介绍了重载和重写有什么区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

重载和重写是Java中两个重要的概念。重载可以实现本类内的方法多态性,重写可以实现子类或实现类的多态性。

一、重载

在自然语言中,经常会出现“一词多义”的现象。比如:“墨水”,它可以指一种含有色素或染料的液体,墨水被用于书写或绘画;还可以指人的文化、知识,“胸无半点墨”便指人的知识很匮乏。一个词语如果有多重含义,那么就说该词语被重载了,具体代表什么含义需要结合具体的场景。在Java语言中,也存在重载,不过它需要满足以下几点:

1.方法名必须相同;

2.参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)

    public static void main(String[] args) {
        print(12);
        print("1234");
        print("hello Java!");
    }
    public static void print(int i){
        System.out.println("打印整型值:"+i);
    }
    public static void print(String s){
        System.out.println("打印字符串类型值:"+s);
    }
    public static void print(String s1,String s2){
        System.out.println("打印字符串类型值1"+s1+";字符串类型值2:"+s2);
    }

   //输出结果
   //打印整型值:12
   //打印字符串类型值:1234
   //打印字符串类型值:hello Java!

编译器在编译代码时,会对实参进行推演,会根据推演的结果来确定调用那个方法。

注意:重载与返回值类型是否相同无关;两个方法如果仅仅只是因为返回值类型不同,是不能构成重载的。具体错误如下所示:

public static void main(String[] args) {
    int a = 10;
    int b = 20;
    int ret = add(a, b);
    System.out.println("ret = " + ret);
 }
public static int add(int x, int y) {
    return x + y;
 }
public static double add(int x, int y) {
   return x + y;
 }
 

//编译错误
Test.java:已在类 TestDemo中定义了方法 add(int,int)
      public static double add(int x,int y){
1个错误

重载和重写有什么区别

二、重写文章来源地址https://www.toymoban.com/news/detail-403634.html

重写(override):也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进 行重新编写 , 返回值和形参都不能改变。即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
方法重写的规则
1.子类在重写父类的方法时,一般必须与父类方法原型一致:修饰符 返回值类型 方法名(参数列表)要完全一致。
2.JDK7以后,被重写的方法返回值类型可以不同,但是必须是具有父子关系的访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方法就不能声明为 protected。
3.父类被static、private修饰的方法、构造方法都不能被重写。
4.子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 fifinal 的方法。
5.子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 fifinal 方法。
6.重写的方法, 可以使用 @Override 注解来显式指定. 有了这个注解能帮我们进行一些合法性校验. 例如不小心将方法名字拼写错了 (比如写成 aet), 那么此时编译器就会发现父类中没有 aet 方法, 就会编译报错, 提示无法构成重写。
重写的具体实现代码如下:
//Animal.java
public class Animal {
    String name;
    int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void eat() {
        System.out.println(name + "吃饭");
    }
}
//Cat.java
public class Cat extends Animal {
    public Cat(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println(name + "吃鱼");
    }
}

//Dog.java
public class Dog extends Animal {
    public Dog(String name, int age){
        super(name, age);
    }

    @Override
    public void eat(){
       System.out.println(name+"吃骨头");
    }
}
//TestAnmal.java
public class TestAnimal {
    // 编译器在编译代码时,并不知道要调用Dog 还是 Cat 中eat的方法
    // 等程序运行起来后,形参a引用的具体对象确定后,才知道调用那个方法
    // 注意:此处的形参类型必须时父类类型才可以
    public static void eat(Animal a) {
        a.eat();
    }

    public static void main(String[] args) {
        Cat cat = new Cat("小黄", 2);
        Dog dog = new Dog("大黄", 3);
        eat(cat);
        eat(dog);
    }
}

//运行结果:
//小黄吃鱼
//大黄吃骨头
三、重载和重写的区别
区别点 重载       重写
参数列表 必须修改 一定不能修改
返回类型 可以修改 一定不能修改
访问限定符 可以修改 一定不能做更严格的限制(可以降低限制)
异常 可以修改 可以减少或者删除,一定不能抛出新的或者更广的异常

到了这里,关于重载和重写有什么区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java中方法的重载与重写

    提示:这里可以添加本文要记录的大概内容: 方法的重载与重写容易混,所以单独拿出来比较 提示:以下是本篇文章正文内容,下面案例可供参考 在同一个类中,允许定义一个以上同名的方法称为方法重载 方法重载的规则: 方法名相同 方法的参数必须不同,参数类型或参

    2024年02月08日
    浏览(44)
  • java面试基础 -- 方法重载 & 方法重写

    目录 重载 重写           方法的重载是指在同一个类中定义多个方法, 他们具有相同的名称, 但是具有不同的参数列表, 例如:         此处我们看到三个不同参数的, 但是具有相同返回值和方法名的方法. 有如下测试案例: 运行结果为:  我们将其中一个myMethod方法的返回值改

    2024年02月12日
    浏览(51)
  • 关于Java中方法重载和方法重写

    方法重写是子类继承父类(默认继承Object类)后覆盖父类的方法 需要保证同名 同参 同返回值 且访问权限范围不能缩小(publicprotecteddefaultprivate) 方法重载是同类中可以有多个同名但参数不同的方法 调用方法的时候可根据传参情况执行对应的方法 需要注意参数不同可以指参数数量

    2023年04月20日
    浏览(52)
  • Java语言中的重写和重载

    重写(override)和重载(overload)是编程语言中的两个常见概念,用于描述函数或方法的特定行为。 重写 指的是在子类中重新定义(覆盖)父类中已经存在的同名方法。重写可以修改或扩展父类的方法实现,使其更适合子类的需求。在重写中,子类方法的名称、参数类型、返

    2024年02月03日
    浏览(43)
  • Go语言支持重载吗?如何实现重写?

    Go语言不支持传统意义上的函数和方法重载。在Go语言中,函数名或方法名不能相同但参数列表不同,因为这会导致编译错误。 然而,可以通过方法重写(override)来实现类似的功能。方法重写是指在子类中定义一个与父类同名的方法,从而覆盖父类中的方法。 下面是一个简

    2024年04月09日
    浏览(46)
  • 【JAVA】关于重写(Override)与重载(Overload)

    个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 关于JAVA,我们也已经学习过一段时间了,今天我们来学习一下在JAVA中方法的重载与重写。 方法重载(overload)是指 在一个类中定义多个同名但参数列表不同的方法 。Java编译器会根据方法调用时传递的参数来选择调用

    2024年02月08日
    浏览(53)
  • 【C++】多态的概念和简单介绍、虚函数、虚函数重写、多态构成的条件、重载、重写、重定义

        C++中的多态是一种面向对象编程的特性, 它允许不同的对象对同一个消息做出不同的响应。 多态性能够提高代码的可复用性和灵活性,使得代码更加模块化和可扩展。    多态性是通过使用继承和虚函数实现的。 当一个类被声明为虚函数时,它可以被子类重写,并

    2024年02月13日
    浏览(43)
  • java八股文面试[java基础]—— 重载 和 重写

      Overload Override Overwrite三者区别:   Java中,有一个名叫方法签名的东西,它的定义是这样的 Definition: Two of the components of a method declaration comprise the method signature—the method’s name and the parameter types. 大概意思是,方法签名有两部分组成——方法名和参数列表 我上面的函数的方法

    2024年02月12日
    浏览(50)
  • java.8 - java -override&overload 重写和重载

    重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变 。 即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。 重写方法不能抛出新的检查异常或者比被重写方法

    2024年02月11日
    浏览(46)
  • python中的类class: 继承、覆盖、重写、重载、扩展、多态、封装

    使用  class  创建类。类中有方法、属性。 1.1 __init__() 函数 类的内置  __init__()  函数。所有类都有一个名为 __init__() 的函数,它在启动类时执行。 使用 __init__() 函数将值赋给对象属性,或者在创建对象时需要执行的其他操作。 每次使用类创建新对象时,都会 自动调

    2024年02月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包