【Java】继承性-方法的重写【主线学习笔记】

2024-09-03 00:04

本文主要是介绍【Java】继承性-方法的重写【主线学习笔记】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 方法的重写
    • 1、方法重写的规则
        • 示例
    • 2、区分方法的重载与重写
        • 重写的示例
        • 重载的示例


前言

Java是一门功能强大且广泛应用的编程语言,具有跨平台性和高效的执行速度,广受开发者喜爱。在接下来的学习过程中,我将记录学习过程中的基础语法、框架和实践技巧等,分享学习心得,对自己学习过程进行整理和总结,也希望能为其他学习Java的朋友提供一些帮助和参考。


方法的重写

子类继承父类后,就拥有了父类中声明的所有非私有方法。但是父类中实现的方法可能不适用于子类,也就是说,子类需要对父类中继承过来的方法进行覆盖的操作,实现不同功能。

1、方法重写的规则

  • 子类中重写的方法必须具有与父类中被重写的方法相同的名称参数列表
  • 并且访问权限不能低于父类中被重写的方法。
  • 返回值类型:如果父类中被重写的方法返回值是基本数据类型,子类中的重写的方法的返回值类型必须与父类的保持一致;如果父类中被重写的方法返回值是引用数据类型(比如类、接口等),则子类重写的方法的返回值可以与被重写的方法类型相同,也可以是父类返回类型的子类。
示例
// 父类
class Parent {// 返回基本数据类型public int getNumber() {return 1;}// 返回引用数据类型public Number getNumberObject() {return 1;}
}// 子类
class Child extends Parent {// 重写父类方法,返回基本数据类型@Overridepublic int getNumber() {return 2;}// 重写父类方法,返回引用数据类型的子类(协变返回类型)@Overridepublic Integer getNumberObject() {return 2;}
}// 主类
public class Main {public static void main(String[] args) {Parent parent = new Parent();Parent child = new Child();// 调用父类的方法System.out.println("Parent getNumber(): " + parent.getNumber());         // 输出: 1System.out.println("Parent getNumberObject(): " + parent.getNumberObject()); // 输出: 1// 调用子类的方法System.out.println("Child getNumber(): " + child.getNumber());           // 输出: 2System.out.println("Child getNumberObject(): " + child.getNumberObject()); // 输出: 2}
}

重写规则使得Java 提供了灵活性和一致性,让子类能够在需要时替代父类的方法,并且在返回类型上允许更具体的实现。

一般写代码的时候直接把该方法从父类中粘贴到子类中,然后直接修改方法体,这样更保险,避免出现缺漏。

2、区分方法的重载与重写

在Java中,重写和重载是面向对象编程中的两种重要机制,它们虽然名称相似,但在概念和用途上有明显的区别。(简单来说,就是他俩没关系)

  • 重写是指在子类中提供与父类方法相同的签名(方法名、参数列表、返回类型、抛出的异常等)来替换父类方法的实现。重写通常用于在继承的层次结构中,为子类提供特定的实现,来代替或扩展父类的方法。
  • 重载是指在同一个类中定义多个同名的方法,但这些方法的参数列表必须不同(参数的数量或类型不同)。重载允许一个方法名根据不同的输入执行不同的操作。
重写的示例
//重写
class Animal {void sound() {System.out.println("Animal makes a sound");}
}class Dog extends Animal {@Overridevoid sound() {System.out.println("Dog barks");}
}
重载的示例
//重载
class Calculator {int add(int a, int b) {return a + b;}double add(double a, double b) {return a + b;}int add(int a, int b, int c) {return a + b + c;}
}

这篇关于【Java】继承性-方法的重写【主线学习笔记】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131453

相关文章

java实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

springboot filter实现请求响应全链路拦截

《springbootfilter实现请求响应全链路拦截》这篇文章主要为大家详细介绍了SpringBoot如何结合Filter同时拦截请求和响应,从而实现​​日志采集自动化,感兴趣的小伙伴可以跟随小... 目录一、为什么你需要这个过滤器?​​​二、核心实现:一个Filter搞定双向数据流​​​​三、完整代码

SpringBoot利用@Validated注解优雅实现参数校验

《SpringBoot利用@Validated注解优雅实现参数校验》在开发Web应用时,用户输入的合法性校验是保障系统稳定性的基础,​SpringBoot的@Validated注解提供了一种更优雅的解... 目录​一、为什么需要参数校验二、Validated 的核心用法​1. 基础校验2. php分组校验3

Java Predicate接口定义详解

《JavaPredicate接口定义详解》Predicate是Java中的一个函数式接口,它代表一个判断逻辑,接收一个输入参数,返回一个布尔值,:本文主要介绍JavaPredicate接口的定义... 目录Java Predicate接口Java lamda表达式 Predicate<T>、BiFuncti

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA