JAVA 基础-多态

一、概念

1.1 说说你对Java多态怎么理解

多态是指允许不同类的对象对同一消息作出响应。即同一个接口,使用不同的实例而执行不同操作。多态性可以分为编译时多态(重载)和运行时多态(重写)。它使得程序具有良好的灵活性和扩展性。

1.3 重载和重写

  • **重载(Overload)**‌:在同一个类中,定义相同的方法名,但参数不同(参数类型、个数、顺序可以不同)。重载是编译时的多态性,对返回类型没有要求。‌

方法重载是指在同一个类中可以定义多个方法,它们的名称相同但参数列表不同(包括参数个数、类型或顺序)。在编译时,Java编译器会根据传入的参数类型或数量来决定调用哪个方法

java 复制代码
class MathUtils {
    public int add(int a, int b) {
        return a + b;
    }
    
    public double add(double a, double b) {
        return a + b;
    }
    
    public int add(int a, int b, int c) {
        return a + b + c;
    }
}
  • ‌**重写(Override)**‌:子类重写父类的方法,方法名和参数列表必须相同,返回类型可以兼容。重写是运行时的多态性,访问修饰符的限制要大于被重写方法的修饰符。

方法重写是指子类可以重写父类的方法,实现不同的行为。当我们通过父类的引用来调用被重写的方法时,实际执行的是子类中的方法。这种特性是"运行时多态"的实现,Java通过动态绑定来实现这一点。

java 复制代码
class Animal {
    void sound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    void sound() {
        System.out.println("Dog barks");
    }
}

class Cat extends Animal {
    void sound() {
        System.out.println("Cat meows");
    }
}

// 使用
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.sound(); // 输出: Dog barks
myCat.sound(); // 输出: Cat meows

1.3 重载和重写的范围

  • 重载‌:发生在同一个类中,对方法的参数进行区分。
  • 重写‌:发生在子类与父类之间,子类重写父类的方法。

1.4 重载和重写的多态性

  • 重载‌:是编译时的多态性,根据传入参数的不同调用相应的方法。
  • 重写‌:是运行时的多态性,通过继承机制,子类可以提供父类方法的特定实现。

1.5 重载和重写的参数要求

  • 重载‌:参数的个数、类型、顺序可以不同。
  • 重写‌:参数必须完全相同。

1.6 重载和重写的访问修饰符要求

  • 重载‌:对访问修饰符没有特殊要求。
  • 重写‌:访问修饰符的限制要大于被重写方法的修饰符(public > protected > default > private)。

1.7 重载和重写的异常处理要求

  • 重载‌:可以抛出不同的异常。
  • 重写‌:不能抛出新的检查异常或者比被重写方法声明更加宽泛的检查型异常。
相关推荐
2601_9491465311 小时前
C语言语音通知接口接入教程:如何使用C语言直接调用语音预警API
c语言·开发语言
曹牧11 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
KYGALYX11 小时前
服务异步通信
开发语言·后端·微服务·ruby
zmzb010311 小时前
C++课后习题训练记录Day98
开发语言·c++
爬山算法12 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty72512 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎12 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄12 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea
YUJIANYUE13 小时前
PHP纹路验证码
开发语言·php
忆~遂愿13 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能