首页 > 编程语言 >Java中方法重写的学习

Java中方法重写的学习

时间:2024-08-27 09:15:05浏览次数:10  
标签:Java 方法 学习 类型 参数 子类 重载 重写

方法重写


目录

方法重写的规则

在Java中,方法重写(Overriding)是面向对象编程中的一个核心概念,它允许子类提供一个与父类相同名称、相同参数列表的方法,以实现或修改父类方法的行为。方法重写必须遵循一定的规则,以确保程序的正确性和可维护性。以下是Java中方法重写的规则:

方法签名必须相同

  • 重写的方法必须具有与父类方法相同的方法名、返回类型和参数列表。参数列表包括参数的类型、顺序和个数。

访问修饰符不能更严格

  • 重写的方法的访问修饰符不能比父类的方法更严格。例如,如果父类方法是public,则子类方法可以是publicprotected,但不能是private

抛出的异常不能更多或更宽泛

  • 重写的方法不能抛出比父类方法更多或更宽泛的异常。但是,子类方法可以抛出比父类方法更少或更具体的异常,或者不抛出异常。

方法重写必须在继承关系中

  • 重写的方法必须在父类和子类之间的继承关系中存在。也就是说,子类必须是父类的直接或间接子类。

静态方法不能被重写

  • 静态方法属于类而不是实例,因此不能被重写。子类可以定义一个与父类静态方法相同的静态方法,但并不是重写,而是隐藏父类的静态方法(这通常被称为方法隐藏)。

final方法不能被重写

  • 如果一个方法被声明为final,则它不能被任何子类重写。final方法是一种固定不变的方法,子类不能改变其行为。

构造方法不能被重写

  • 构造方法是用于创建对象的特殊方法,不能被重写。但是,子类可以通过调用super关键字来调用父类的构造方法。

返回类型

  • 重写方法的返回值类型必须与被重写方法的返回值类型相同,或者是其子类型。在Java 5及以后的版本中,如果父类方法返回类型是Object,则子类重写该方法时可以返回任何类型的对象。

synchronized和strictfp关键字对重写规则的影响

  • synchronized关键字用于在多线程环境中获取和释放监听对象,它对重写规则没有直接影响,即synchronized方法可以去重写一个非同步方法。
  • strictfp关键字用于确保浮点运算的精确性,它同样对重写规则没有直接影响。

示例

假设有一个父类Animal和一个子类Dog,子类Dog重写了父类Animal中的eat方法:

public class Animal {
    public void eat() {
        System.out.println("Animal is eating");
    }
}

public class Dog extends Animal {
    @Override
    public void eat() {
        super.eat(); // 调用父类的eat方法
        System.out.println("Dog is eating specially");
    }
}

在这个例子中,Dog类重写了Animal类的eat方法,并且使用@Override注解来标记这是一个重写的方法。这样,编译器能够检查该方法是否符合重写规则。

方法重载的规则

Java中的方法重载(Overloading)是指在同一个类中定义多个方法名相同但参数列表不同的方法。通过方法重载,可以根据不同的参数类型和个数来调用不同的方法,从而提高代码的灵活性和可复用性。以下是Java方法重载的规则:

方法名必须相同

  • 在同一个类中,只有方法名相同的方法才有可能构成重载关系。如果方法名不同,则无论参数列表如何,它们都不是重载关系。

Java中的方法重载(Overloading)是指在同一个类中定义多个方法名相同但参数列表不同的方法。通过方法重载,可以根据不同的参数类型和个数来调用不同的方法,从而提高代码的灵活性和可复用性。以下是Java方法重载的规则:

方法名必须相同

  • 在同一个类中,只有方法名相同的方法才有可能构成重载关系。如果方法名不同,则无论参数列表如何,它们都不是重载关系。

参数列表必须不同

  • 参数列表的不同可以体现在参数类型、参数个数或参数顺序上。只要这三个方面中的任何一个不同,就可以构成重载关系。
  • 需要注意的是,仅返回类型不同并不能构成重载关系。

访问修饰符和返回类型不影响重载

  • 方法的访问修饰符(如public、private、protected)和返回类型(但返回类型不能作为区分重载的依据)对重载没有影响。即使两个方法的访问修饰符或返回类型不同,只要它们的方法名和参数列表相同,它们也不是重载关系。

可以抛出不同的异常

  • 重载方法可以抛出不同的异常,但需要遵循Java异常处理的规则。异常类型并不作为重载的依据,但可以在重载的方法中根据实际需要抛出不同的异常。

调用重载方法时根据参数类型和个数确定

  • 在调用重载方法时,编译器会根据传入的参数类型和个数来匹配对应的方法,选择最匹配的方法进行调用。

参数列表必须不同

  • 参数列表的不同可以体现在参数类型、参数个数或参数顺序上。只要这三个方面中的任何一个不同,就可以构成重载关系。
  • 需要注意的是,仅返回类型不同并不能构成重载关系。

访问修饰符和返回类型不影响重载

  • 方法的访问修饰符(如public、private、protected)和返回类型(但返回类型不能作为区分重载的依据)对重载没有影响。即使两个方法的访问修饰符或返回类型不同,只要它们的方法名和参数列表相同,它们也不是重载关系。

可以抛出不同的异常

  • 重载方法可以抛出不同的异常,但需要遵循Java异常处理的规则。异常类型并不作为重载的依据,但可以在重载的方法中根据实际需要抛出不同的异常。

调用重载方法时根据参数类型和个数确定

  • 在调用重载方法时,编译器会根据传入的参数类型和个数来匹配对应的方法,选择最匹配的方法进行调用。

标签:Java,方法,学习,类型,参数,子类,重载,重写
From: https://www.cnblogs.com/BingBing-8888/p/18381976

相关文章

  • 滚雪球学Java(91):Java GUI编程实战:精通组件开发技巧,真有点东西!
      咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及JavaSE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~......
  • JVM(Java Virtual Machine,Java虚拟机)
    JVM(JavaVirtualMachine,Java虚拟机)是Java平台的核心组成部分,它负责运行Java程序。JVM使得Java程序能够“一次编写,到处运行”(WriteOnce,RunAnywhere),这是Java语言的一个重要特性。JVM通过在不同的操作系统上提供统一的运行时环境来实现这一特性。JVM的主要组成部分JVM主......
  • java反序列化——CC1链
    参考【【Java反序列化链】CommonsCollections1深入浅出,详细分析(cc1链)】【Java反序列化链】CommonsCollections1深入浅出,详细分析(cc1链)_哔哩哔哩_bilibilijava反序列化是java安全中非常重要的一点,也是最难的一点,我只能勉强跟着链子走一遍附上一些浅显的理解。 CC1链也......
  • Java线程的实践及原理揭秘
    Java线程的实践及原理揭秘并发是什么?系统支持高并发的因素是哪些?1.如何理解系统的并发一般来说,系统在单位时间内能够承载的并发数就是整个系统同事能够处理的请求数量。对于并发的指标通常通过TPS/QPS来表示QPS:每秒处理的查询数(Queries-Per-Second)TPS:每秒处理的事务数(Tr......
  • 【网络编程通关之路】 Udp 基础回显服务器(Java实现)及你不知道知识原理详解 ! ! !
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • Java面试题--JVM大厂篇之JVM大厂面试题及答案解析(7)
           ......
  • 机械学习—零基础学习日志(如何理解概率论8)
    随机变量的协方差与相关系数来一道练习题:要先求出,a的数值:要求联合分布律:再求期望:计算相关数值:最后得到结果:《概率论与数理统计期末不挂科|考研零基础入门4小时完整版(王志超)》学习笔记王志超老师  (UP主)......
  • javascript怎么实现链表?
    在JavaScript中实现链表通常涉及定义一个链表节点类(通常称为ListNode)和一个链表类(例如LinkedList),然后在这个链表类中实现各种操作链表的方法,如添加节点、删除节点、遍历链表等。以下是使用JavaScript实现单向链表的一个基本示例:链表节点类(ListNode)首先,我们定义一个链表节点......
  • 【Java】IDEA从零到一使用statemachine状态机模拟订单 (图解)
    Java系列文章目录补充内容Windows通过SSH连接Linux第一章Linux基本命令的学习与Linux历史文章目录Java系列文章目录一、前言二、学习内容:三、问题描述四、解决方案:4.1认识依赖4.2使用状态机4.2.1目录结构4.2.2状态机解析4.2.2.1概念4.2.2.2图解4.2.2.3拓展......
  • java连接sqlite数据库
    首先下载jar包(每种数据库有自己jar包)然后idea里创建新项目并且在项目里创建lib文件里面放jar包接着导入jar包然后apply->ok这样就连上如果要可视化数据库DBBrowser最后测试连接TestConnection看数据库连上没结果:......