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

方法的重载和重写有什么区别

时间:2024-09-12 19:54:08浏览次数:3  
标签:不同 区别 重写 参数 子类 重载 方法

1.是什么

        在Java中,方法的重载(Overloading)和重写(Overriding)是两个不同的概念,它们用于实现不同的目的和功能。以下是方法重载和方法重写的区别:


方法重载(Overloading)

        方法重载是指在同一个类中定义多个方法,这些方法具有相同的名字但参数列表不同。重载方法允许程序调用具有不同参数列表的方法,从而实现相同操作的不同方式。

特点:

  1. 方法名相同:所有重载方法必须具有相同的名字。
  2. 参数列表不同:每个重载方法必须有不同的参数列表,这意味着参数的类型、数量或顺序必须不同。
  3. 返回类型可以相同也可以不同:重载方法可以有相同的返回类型,也可以有不同的返回类型。
  4. 方法可以有默认参数:Java 8及以后版本允许方法有默认参数,但即使有默认参数,只要参数列表不同,方法仍然是重载的。
  5. 作用域可以不同:重载方法可以有不同作用域,如publicprivateprotected等。

示例:

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }

    public String add(String a, String b) {
        return a + b;
    }
}

        在这个例子中,Calculator类定义了三个add方法,每个方法都有不同的参数列表。


方法重写(Overriding)

        方法重写是指子类提供与父类方法具有相同名字和参数列表的方法。重写方法允许子类提供与父类相同操作的不同实现。

特点:

  1. 方法名相同:所有重写方法必须具有相同的名字。
  2. 参数列表相同:重写方法的参数列表必须与父类方法完全相同。
  3. 返回类型可以不同:重写方法的返回类型必须与父类方法的返回类型相同,或者可以更具体(如父类是int,子类可以是Integer)。
  4. 访问权限可以不同:重写方法可以有更高的访问权限(如父类是protected,子类可以是public)。
  5. 抛出异常可以不同:重写方法可以抛出与父类方法不同的异常,或者不抛出任何异常。

示例:

class Animal {
    public void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Dog barks");
    }
}

        在这个例子中,Dog类重写了Animal类的makeSound方法,提供了不同的实现。


总结:

区别点重载(Overloading)重写(Overriding)
发生位置同一个类中父类与子类之间
参数列表必须不同(参数个数、类型或顺序不同)必须相同
返回类型可以相同,也可以不同必须相同(Java 5 之后,允许返回类型是协变类型)
方法名相同相同
修饰符无限制访问修饰符不能比父类的更严格
多态性编译时多态性运行时多态性
与继承的关系与继承无关与继承相关,子类重写父类的方法
目的提供同一个方法名的多个实现,以处理不同类型或数量的参数子类定制父类方法的行为

典型应用场景

  • 重载(Overloading)

    • 重载通常用于同一个类中提供多种方式的功能。例如,println() 方法有多个重载版本,接受不同的参数类型(如 intdoubleString 等)。
  • 重写(Overriding)

    • 重写用于子类根据自身的需求来定制化父类的行为。例如,toString() 方法通常会在子类中重写,以提供类的自定义字符串表示形式。

标签:不同,区别,重写,参数,子类,重载,方法
From: https://blog.csdn.net/2401_83418369/article/details/142184310

相关文章

  • MQ和kafka的区别
    一MQ的概述消息中间件,其实准确的叫法应该叫消息队列(messagequeue),简称MQ。MQ一般用在几种场景:流量削锋:流量过大的时候,用MQ作为一个中间层,暂时存储流量,让流量在队列中排队去访问服务,从而控制直接访问服务的流量,减轻服务的实时流量压力。应用解耦:使用MQ作为应用之间的中间......
  • [CSS] 伪元素和伪类,::before 和 :before 区别
    特点伪类伪元素用途选择元素的状态或基于结构选择元素创建虚拟的内容,操作元素的某些部分语法使用单个冒号(......
  • Ntrip client、Ntrip Server、Ntrip Caster区别
    在RTKLIB中,NTRIP客户端(NTRIPclient)、NTRIP服务器(NTRIPserver)和NTRIP转发器(NTRIPcaster)是用于实现网络实时运行的关键组件,特别是用于实时的GNSS数据流。 NTRIP客户端(NTRIPclient):NTRIP客户端是用于接收实时GNSS数据流的应用程序或设备。它连接到NTRIP服务器以获取实时数......
  • 机器学习,深度学习,AGI,AI的概念和区别
    1.人工智能(AI)的定义与范围1.1AI的基本概念人工智能(AI)是指通过计算机系统模拟人类智能的技术和科学。AI的目标是创建能够执行通常需要人类智能的任务的系统,如视觉识别、语音识别、决策制定和语言翻译。AI的核心在于其能够处理和分析大量数据,从中提取有用的信息,并根据这些......
  • 主流Linux发行版本区别(CentOS、麒麟、Ubuntu)
    1.基础操作与系统基本配置操作与指令CentOS麒麟Ubuntu版本与内核CentOS7.9内核:3.10.0Kylinv10sp3内核:4.19.90Ubuntu20.04lts内核:5.4.0(20.04)5.15(22.04)密码要求随意8位并且大写,小写,数字,特殊符号4种中3种随意......
  • ref和reactive区别
    在Vue3中,ref和reactive都是用于创建响应式数据的工具,但它们的应用场景和使用方式有所不同。下面是它们的主要区别:1.定义和用法ref:用于创建一个基本类型(如字符串、数字、布尔值等)或对象的响应式引用。ref返回的是一个包含.value属性的对象,访问和修改其值时需要使......
  • cookie和seesion区别
    Cookie和Session是两种用于在客户端和服务器之间存储用户信息的机制,它们在存储方式、生命周期、安全性等方面存在显著差异。以下是它们的主要区别:1.存储位置Cookie:存储在用户的浏览器中。每次向服务器发送请求时,浏览器会自动附带相应的Cookie。Session:存储在......
  • v-if与v-show区别
    在Vue.js中,v-if和v-show都用于条件渲染,但它们在实现方式和性能上有显著区别。以下是它们的主要区别:1.实现方式v-if:v-if是一个指令,用于有条件地渲染元素。当条件为false时,相关的DOM元素不会被渲染到页面中。当条件改变为true时,Vue会重新创建该元素及其子元......
  • 用父类的对象引用子类对象中重写的方法 静态方法重写
    用父类的对象引用子类对象中重写的或继承的方法比如,以下程序中,Shape是抽象类,Circle和Rectangle是子类,均重写了抽象方法//定义抽象类publicabstractclassShape{//定义2个抽象方法publicabstractdoubleGetArea();publicabstractdoubleGetCircum();//定义普通方法p......
  • 做TikTok:你知道节点和专线有什么区别吗?
    现在很多朋友和商家都开始涉猎TikTok做电商直播,对于网络问题:选择节点还是专线?这两者到底有什么区别呢?今天我们来简单分析一下,帮助你找到最适合的网络方案。1.什么是节点?什么是专线?节点其实是网络中的“跳板+加速器”,通过分布在不同地区的节点服务器,帮助用户绕过地理限制,提升......