首页 > 其他分享 >方法重载和方法重写的区别

方法重载和方法重写的区别

时间:2024-02-01 12:44:07浏览次数:29  
标签:String 重写 参数 子类 重载 方法

方法重载和方法重写的区别

1.什么是方法重载?

方法重载(Method Overloading)是指在同一个类中,可以定义多个方法具有相同的名称,但是参数列表不同。重载的方法可以有不同的参数类型、不同的参数个数,或者参数类型的顺序不同。方法重载的目的是提高代码的灵活性和可读性。

方法重载的规则:

  1. 方法名称相同: 重载的方法必须具有相同的名称。

  2. 参数列表不同: 重载的方法必须具有不同的参数列表。这可以通过参数类型、参数个数,或者参数类型的顺序来实现。

  3. 返回类型可以相同也可以不同: 方法重载可以具有相同的返回类型,也可以具有不同的返回类型。返回类型不是重载的决定性因素。

  4. 访问修饰符和异常类型不影响重载: 方法重载可以具有相同或不同的访问修饰符(如 publicprivateprotected)和可以抛出相同或不同的异常。

例子:

public class OverloadExample {

    // 方法重载:不同参数类型
    static int add(int a, int b) {
        return a + b;
    }

    // 方法重载:不同参数个数
    static double add(double a, double b, double c) {
        return a + b + c;
    }

    // 方法重载:不同参数类型和参数个数
    static String concatenate(String str1, String str2) {
        return str1 + str2;
    }

    static String concatenate(String str1, String str2, String str3) {
        return str1 + str2 + str3;
    }

    public static void main(String[] args) {
        System.out.println(add(2, 3));                // 输出 5
        System.out.println(add(1.5, 2.5, 3.5));       // 输出 7.5
        System.out.println(concatenate("Hello, ", "World!"));          // 输出 Hello, World!
        System.out.println(concatenate("Java", " is", " awesome!"));  // 输出 Java is awesome!
    }
}

在上面的例子中,add 方法和 concatenate 方法都展示了方法重载的不同形式。通过这样的方式,我们可以根据不同的参数情况使用相同的方法名称,提高代码的可读性和灵活性。


2. 什么是方法重写

方法重写(Method Overriding)是指子类中定义了一个与父类中已有的方法签名(包括方法名称、返回类型和参数列表)相同的方法,并且具有相同的访问修饰符。通过方法重写,子类可以提供自己的实现,覆盖父类中的相应方法。

方法重写是实现多态性(Polymorphism)的一种方式,允许在运行时动态选择调用哪个方法,具体调用哪个方法取决于对象的实际类型。

方法重写的规则:

  1. 方法名称、返回类型和参数列表必须相同: 在子类中重写的方法必须与父类中的方法具有相同的名称、返回类型和参数列表。

  2. 访问修饰符不能更严格: 子类中重写的方法的访问修饰符不能比父类中的方法更严格。例如,如果父类方法是 protected,子类方法可以是 protected 或者 public,但不能是 private 或默认(不加修饰符)。

  3. 抛出的异常不能更多,不能更限制: 子类中重写的方法可以不抛出异常,或者抛出与父类相同的异常,不能抛出更多或更限制的异常。

例子:

class Animal {
    void makeSound() {
        System.out.println("Some generic sound");
    }
}

class Dog extends Animal {
    // 方法重写
    @Override
    void makeSound() {
        System.out.println("Bark! Bark!");
    }
}

class Cat extends Animal {
    // 方法重写
    @Override
    void makeSound() {
        System.out.println("Meow");
    }
}

public class OverrideExample {
    public static void main(String[] args) {
        Animal animal1 = new Dog();
        Animal animal2 = new Cat();

        animal1.makeSound();  // 输出 Bark! Bark!
        animal2.makeSound();  // 输出 Meow
    }
}

在上面的例子中,DogCat 类继承自 Animal 类,它们分别重写了 makeSound 方法。在 main 方法中,通过多态性,使用父类的引用指向子类的对象,实现了动态调用相应子类的重写方法。这就是方法重写的一个典型应用场景。

3.两者区别

  1. 前者是使用在同一类下,方法用意相同但是传参不同
  2. 后者是主要用于继承,改写父类方法达到子类目的

标签:String,重写,参数,子类,重载,方法
From: https://www.cnblogs.com/123lhio/p/18000976

相关文章

  • hashcode 是哪个类的方法
    hashCode 方法是 java.lang.Object 类的一个方法。在 Java 中,所有的类都直接或间接地继承自 Object 类,因此每个 Java 对象都继承了 hashCode 方法。这个方法用于返回对象的哈希码,是 Java 中实现哈希表的基础,如 HashMap、HashSet 等。hashCode 方法的通用合约包括:......
  • [Git]关联远程库的两种方法及配置
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18000705出自【进步*于辰的博客】参考笔记三,P16。目录1、连接方式1.1HTTPS1.1.1身份验证方法1.1.2两个问题1.1.3不足之处1.2ssh1.2.1概述1.2.2公钥配置1.2.3注意......
  • 一个 WPF + MudBlazor 的项目模板(附:多项目模板制作方法)
    最近做了几个WPF+MudBlazor的小东西,每次从头搭建环境比较繁琐,然鹅搭建过程还没啥技术含量,索性就直接做了个模板,方便以后使用。1.介绍一个用来创建.NET8+WPF+MudBlazor的项目模板适用于VS2022用法:vs插件市场下载or自己通过Github源码编译2.模板打包方......
  • 阻抗建模-dq轴各分量表达式计算方法
    symsw1wpttheta_pllfai_vpfai_vnV1VpVn%直流分量Vd_dc=simplify((2/3)*V1*cos(w1*t)*cos(theta_pll)...+(2/3)*V1*cos(w1*t-2*pi/3)*cos(theta_pll-2*pi/3)...+(2/3)*V1*cos(w1*t+2*pi/3)*cos(theta_pll+2*pi/3))%正序分量**Vd_p=simplify((2/3)*Vp*cos(w......
  • python中不同类型文件的读取方法
    在进行卷积神经网络的学习过程中,碰到了不同类型的数据集加载,下面总结一下:1、文本文件:CSV、TSV、Json、Txt1.1、简介CSV文件是逗号分隔值(Comma-SeparatedValues,CSV),其文件以纯文本形式存储表格数据(数字和文本);TSV是Tab-separatedvalues的缩写,即制表符分隔值,与csv和txt都同属......
  • 问题:观察者方法属于组件协作()
    问题:观察者方法属于组件协作()是否参考答案如图所示问题:牛黄清心丸主要适应症是()A.中风预防以及急救B.中风预防和康复C.美容养颜D.抗衰老延年益寿此题为多项选择题。参考答案如图所示......
  • 特殊的方法引用
    在java中,使用方法引用时,引用的方法和需要实现的方法参数不一致?!在我学习mybatis-plus时,多次运用lambda表达式,其中不免使用到方法引用!其中有种特殊方法引用我就很是不解,就是基础知识不够牢靠导致,我也亡羊补牢立即回去取经,特此记随写一篇!示例:@GetMapping("test")publicR......
  • Python 机器学习 K-近邻算法 常用距离度量方法
    ​K-近邻(K-NearestNeighbors,KNN)算法中,选择合适的距离度量是非常重要的,因为它决定了如何计算数据点之间的“相似性”。不同的距离度量可能会导致不同的KNN模型性能。选择哪种距离度量取决于数据的类型和问题的性质。可以通过交叉验证来比较不同距离度量对模型性能的影响,以选择最......
  • [word] word中选定一个句子的方法是什么?
    在Word中选定一个句子的方法是按住Ctrl同时单击句中任意位置。word中选择文本的方法:选择句子:该方法能快速地选择出句子。方法是按住键盘上的Ctrl键不放,然后用鼠标单击句子中的任何文本即可。选择一行:此方法能快速地选择出一行。方法是把鼠标放在这一行的选定栏(所谓选定栏,是指页面左......
  • 3.4 概率密度估计的非参数方法
    参数估计和非参数估计的区别参数估计是已知分布类型和部分分布参数后,从指定的一类函数中选择一个用于估计未知函数。参数估计要求的样本数目很少,但是对密度函数需要有先验认识。非参数估计是在已知分布信息极其有限的情况下,从所有可能的函数中找出一个估计未知函数。非参数估计......