首页 > 编程语言 >【JAVA】Java基础—面向对象编程:多态—多态的概念

【JAVA】Java基础—面向对象编程:多态—多态的概念

时间:2024-11-17 20:15:45浏览次数:3  
标签:makeSound Java 面向对象编程 重写 多态 Animal 方法 public

在Java编程中,多态是面向对象编程(OOP)的核心特性之一。它允许对象以多种形式存在,使得程序能够在运行时根据对象的实际类型调用相应的方法。这种特性不仅提高了代码的灵活性和可扩展性,还能减少代码重复,提高代码的可维护性。

1. 什么是多态?

多态(Polymorphism)是指同一个操作作用于不同的对象,可以产生不同的结果。它主要分为两种类型:

  • 编译时多态(静态多态):通过方法重载(Method Overloading)实现。

  • 运行时多态(动态多态):通过方法重写(Method Overriding)实现。

2. 方法重载与方法重写

  • 方法重载:在同一个类中,方法名相同但参数列表不同。编译器根据参数的类型和数量来决定调用哪个方法。

  • 方法重写:子类重新定义父类中已经定义的方法。通过重写,子类可以提供特定的实现。

3. 多态的实现方式

多态通常通过以下方式实现:

  • 父类引用指向子类对象:使用父类类型的引用来指向子类的实例。

  • 方法重写:子类重写父类的方法。

示例一:方法重载(编译时多态)

首先,我们来看一个简单的例子,展示方法重载如何实现编译时多态。

// 定义一个类 MathOperations
class MathOperations {
    // 方法重载:计算两个整数的和
    public int add(int a, int b) {
        return a + b;
    }

    // 方法重载:计算三个整数的和
    public int add(int a, int b, int c) {
        return a + b + c;
    }

    // 方法重载:计算两个浮点数的和
    public double add(double a, double b) {
        return a + b;
    }
}

// 主类
public class Main {
    public static void main(String[] args) {
        MathOperations math = new MathOperations();

        // 调用不同的 add 方法
        System.out.println("Sum of 2 integers: " + math.add(5, 10));           // 输出: 15
        System.out.println("Sum of 3 integers: " + math.add(5, 10, 15));      // 输出: 30
        System.out.println("Sum of 2 doubles: " + math.add(5.5, 10.5));       // 输出: 16.0
    }
}
代码解释
  • MathOperations类:定义了多个add方法,展示了方法重载。根据传入参数的类型和数量,Java编译器会选择合适的方法进行调用。

  • 主类Main:在main方法中,我们创建了MathOperations的实例,并调用不同的add方法。输出结果展示了编译时多态的效果。

示例二:方法重写(运行时多态)

接下来,我们将展示运行时多态的例子,使用方法重写来实现。

// 定义一个抽象类 Animal
abstract class Animal {
    // 抽象方法:动物发出声音
    public abstract void makeSound();
}

// 定义一个子类 Dog 继承自 Animal
class Dog extends Animal {
    // 重写 makeSound 方法
    @Override
    public void makeSound() {
        System.out.println("Dog barks");
    }
}

// 定义一个子类 Cat 继承自 Animal
class Cat extends Animal {
    // 重写 makeSound 方法
    @Override
    public void makeSound() {
        System.out.println("Cat meows");
    }
}

// 主类
public class Main {
    public static void main(String[] args) {
        // 创建 Animal 类型的引用,指向 Dog 对象
        Animal myDog = new Dog();
        // 创建 Animal 类型的引用,指向 Cat 对象
        Animal myCat = new Cat();

        // 调用 makeSound 方法
        myDog.makeSound(); // 输出: Dog barks
        myCat.makeSound(); // 输出: Cat meows
    }
}
代码解释
  • Animal类:这是一个抽象类,定义了一个抽象方法makeSound,所有动物类必须实现这个方法。

  • Dog和Cat类:分别继承自Animal类,并重写makeSound方法,提供各自特有的声音。

  • 主类Main:在main方法中,我们使用Animal类型的引用来指向不同的子类对象(DogCat)。当调用makeSound方法时,Java运行时根据实际对象类型(而不是引用类型)决定调用哪个方法,这就是运行时多态的体现。

总结

将多态比喻为一个演员在不同角色中的表现。一个演员(对象)可以在不同的剧本(类)中扮演不同的角色(方法实现)。当观众(程序)看到演员(对象)时,他们并不关心演员的名字(类名),而是关注他们在特定剧本中所扮演的角色(方法实现)。这种灵活性使得同一个演员能够在不同的情境中展现不同的才华。

多态是Java面向对象编程的重要特性,它通过方法重载和方法重写的方式实现了对象的灵活性和可扩展性。在实际应用中,多态能够帮助开发者编写更简洁、可维护的代码。理解多态的概念及其实现方式,将有助于开发者在设计复杂系统时,利用Java的面向对象特性,提升代码的可读性和可维护性。

标签:makeSound,Java,面向对象编程,重写,多态,Animal,方法,public
From: https://blog.csdn.net/thinking_chou/article/details/143758424

相关文章

  • 【JAVA】Java基础—面向对象编程:多态—父类引用指向子类对象
    在Java中,父类引用指向子类对象是实现多态性的重要特性。这种特性使得程序能够以统一的方式处理不同的对象,增强了代码的灵活性和可扩展性。在实际开发中,尤其是在面向对象编程(OOP)中,利用父类引用指向子类对象的能力,可以使得代码更加简洁和易于维护。1.多态性(Polymorphism)多态性......
  • Java学习教程,从入门到精通,Java继承语法知识点及案例代码(29)
    1、Java继承语法知识点及案例代码一、继承的基本概念继承是面向对象编程中的一个重要概念,指的是子类从父类继承属性和方法的能力。通过继承,子类可以直接访问父类的非私有属性和非私有方法,实现代码重用和扩展。二、继承的语法在Java中,使用关键字extends来实现继承。子类......
  • java day13 Set集合 & Map集合 & Stream流
    目录​编辑1.Set集合: 1.Set集合的特点:  2.HashSet的底层原理:​编辑  3.LinkedHashSet集合的底层原理:  4.TreeSet集合:2.Map集合: 1.Map集合概述: 2.Map集合的常用方法:3.Map集合的遍历方式:  4.Map集合的实现类:3.Stream流:1.获取流的方法:2.流......
  • 零基础Java第十五期:抽象类接口(一)
    目录一、抽象类1.1.抽象的概念1.2.抽象类语法 1.3.抽象类的特性 1.4.图形类例子 二、接口2.1.接口的概念2.2.语法规则 2.3.  接口的特性 2.4.接口的使用2.5. 实现多个接口2.6.工作当中常用的接口 一、抽象类1.1.抽象的概念    如果......
  • 基于Java+SSM+Vue数字乡村管理系统的设计与实现
    博主主页:一季春秋博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、小程序、安卓app、大数据等设计与开发。感兴趣的可......
  • 零基础java学习-预科准备-博客的重要性
    零基础java学习-预科准备-博客的重要性学习准备:博客(英文名blog,正式名称为网络日记)为什么要写博客?(简要:加深印象、总结经验、吸取教训、养成良好习惯收益无穷)1.需要总结和思考,能帮助我们更有效的记忆。2.提升文笔组织能力,进公司可能每周都要写周报,可能会写一些详细的帮助文档,要......
  • C++--多态语法介绍
    目录多态的概念多态的定义及实现多态的构成条件实现多态还有两个必须重要条件虚函数虚函数的重写/覆盖多态场景的⼀个选择题虚函数重写的⼀些其他问题协变析构函数的重写override和final关键字重载/重写/隐藏的对比纯虚函数和抽象类多态的原理虚函数表指针多态的原......
  • 韩顺平Java坦克大战项目分析与实现
    JAVA坦克大战项目文章目录界面技术栈项目结构Tank坦克父类EnemyTank敌人坦克类Hero己方坦克类Bomb爆炸类Shot子弹类MyPanel面板类AePlayWave坦克大战音乐类Node类Recorder记录类程序入口类功能子弹移动(线程)坦克移动(线程)每隔100毫秒,重绘区域,刷新绘图区(......
  • java初步与IDEA的安装
    为什么选择JavaJava用途广泛:Java是目前使用最为广泛的网络编程语言之一,在服务器端占比90%以上.Java可以用来做什么:1.企业级应用,特别是金融服务与电子商务领域.2.Android应用开发,是Android移动应用的主要开发语言之一.3.Web开发.4.桌面应用.5.大数据技术,hadoop及......
  • Java集合框架高频面试问题精粹(下篇)
    书接上回,上一篇文章介绍了Java集合常见面试题全解(上),反响不错,也有很多同学发表了自己的观点,这次又来了,这次是Java集合常见面试题总结(下)了,主要讲解了Map集合原理,它的使用频率也是很高。那么它的存储结构和实现原理是怎么样的呢一、Collections工具类(不重要)Collections 工......