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

  • 重载‌:可以抛出不同的异常。
  • 重写‌:不能抛出新的检查异常或者比被重写方法声明更加宽泛的检查型异常。
相关推荐
软件黑马王子5 分钟前
Unity游戏制作中的C#基础(3)加减乘除算术操作符,比较运算符,逻辑与,或运算符
开发语言·unity·c#
张太行_6 分钟前
Qt Creator 设计界面后的预览方法
开发语言·qt
视觉CG11 分钟前
【Viewer.js】vue3封装图片查看器
开发语言·javascript·vue.js
h^hh17 分钟前
洛谷 P3405 [USACO16DEC] Cities and States S(详解)c++
开发语言·数据结构·c++·算法·哈希算法
qwy71522925816323 分钟前
20-R 绘图 - 饼图
开发语言·数据库·r语言
重生之我要成为代码大佬24 分钟前
Python天梯赛10分题-念数字、求整数段和、比较大小、计算阶乘和
开发语言·数据结构·python·算法
琑9541 分钟前
nextjs项目搭建——头部导航
开发语言·前端·javascript
Distance失落心1 小时前
idea任意版本的安装
java·ide·java-ee·eclipse·intellij-idea
Aphelios3801 小时前
Linux 下 VIM 编辑器学习记录:从基础到进阶(下)
java·linux·学习·编辑器·vim
酷爱码1 小时前
2025 PHP授权系统网站源码
开发语言·php