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 重载和重写的异常处理要求

  • 重载‌:可以抛出不同的异常。
  • 重写‌:不能抛出新的检查异常或者比被重写方法声明更加宽泛的检查型异常。
相关推荐
重生之我是数学王子4 分钟前
网络编程 UDP编程 Linux环境 C语言实现
linux·c语言·开发语言·网络·网络协议·udp
麻衣带我去上学26 分钟前
Spring源码学习(五):Spring AOP
java·学习·spring
何曾参静谧34 分钟前
「C/C++」C/C++标准库 之 #include<cstddef> 常用定义和宏
c语言·开发语言·c++
木宇(记得热爱生活)35 分钟前
C++ <string> 标头文件详解
开发语言·c++
大哇唧1 小时前
python批量合并excel文件
开发语言·python·excel
北欧人写代码1 小时前
idea java 项目右键new file时 为什么是 kotlin class 不是普通class
java·kotlin·intellij-idea
笔墨登场说说1 小时前
JDK 里面的线程池和Tomcat线程池的区别
java·servlet·tomcat
on the way 1231 小时前
java.io.IOException: Too many open files
java·开发语言
你有抖音吗1 小时前
【每日 C/C++ 问题】
开发语言·c++
大鲤余1 小时前
rust 中if let、match -》 options和Result枚举类型
开发语言·后端·rust