Java基础 | 多态

简介: Java中的多态讲解

多态

(一)概述

同一个对象,在不同时刻表现出来的不同形态

举例:猫

我们可以说猫是猫:Cat = new Cat();

我们也可以说猫是动物:Animals = new Cat();

这里猫在不同的时刻表现出了不同的形态,这就是多态

多态的前提和体现:

  • 有继承/实现关系
  • 有方法重写
  • 有父类引用指向子类对象

(二)多态中成员访问特点

  • 成员变量:编译看左边,执行看左边
  • 成员方法:编译看左边,执行看右边

为什么成员变量和成员方法的访问不一样?

  • 因为成员方法有重写,而成员变量没有

代码演示:

Animals类:

public class Animals {
    public int age = 40;

    public void show() {
        System.out.println("动物吃饭");
    }
}

Cat类:

public class Cat extends Animals{
    public int age = 20;
    public int weight = 30;
    @Override
    public void show() {
        System.out.println("猫吃饭");
    }
    public void playGame() {
        System.out.println("猫玩游戏");
    }
}

测试类:

public class AnimalsDemo {
    public static void main(String[] args) {
        Animals a = new Cat();
        System.out.println(a.age);  // 40   执行看左边(成员变量)
        //  System.out.println(a.weight); //编译看左边  Animals只有 age 没有 weight

        a.show();   //  猫吃饭     执行看右边(成员方法)
        //  a.playGame();   //编译看左边  Animals只有show方法没有playGame方法
    }
}


(三)多态的好处和弊端

  • 多态的好处:提高了程序的扩展性

    ​ 具体表现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作

  • 多态的弊端:不能使用子类的特有功能

(四)多态中的转型

  • 向上转型

    ​ 从子到父

    ​ 父类引用指向子类对象

  • 向下转型

    ​ 从父到子

    ​ 父类引用转为子类对象

代码演示:

Animal类:

public class Animal {
    public void eat() {
        System.out.println("动物吃饭");
    }
}

Cat类:

public class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
    public void playGame() {
        System.out.println("猫玩游戏");
    }
}

测试类:

public class AnimalDemo {
    public static void main(String[] args) {
        Animal a = new Cat();   //向上转型  子类赋值给父类对象
        a.eat();
        //a.playGame();   //  编译看左边 Animal类没有playGame方法

        //为了不创建新的猫类对象浪费空间又想要使用猫类特有的方法就要向下转型
        Cat c = (Cat)a; //向下转型 ,将父类对象强行转型为子类
        c.playGame();
    }
}

目录
相关文章
|
11天前
|
Java
Java面向对象编程新篇章:多态,你准备好了吗?
【6月更文挑战第17天】Java的多态性是面向对象编程的核心,它允许通过统一的接口处理不同类型的对象。例如,在一个虚拟宠物游戏中,抽象类`Pet`定义了`speak()`方法,猫、狗和鹦鹉等子类各自重写此方法以实现独特叫声。在`main`方法中,使用`Pet`类型的引用创建子类对象并调用`speak()`,多态机制确保调用实际对象的方法,实现代码的灵活性和可扩展性。通过多态,我们能以更低的耦合度和更高的复用性编写更优雅的代码。
|
3天前
|
Java 机器人 程序员
深入理解Java中的类与对象:封装、继承与多态
深入理解Java中的类与对象:封装、继承与多态
|
2天前
|
安全 Java
|
4天前
|
安全 Java
深度解读Java的继承和多态的特性
深度解读Java的继承和多态的特性
|
7天前
|
Java 编译器
Java多态(如果想知道Java中有关多多态的知识点,那么只看这一篇就足够了!)
Java多态(如果想知道Java中有关多多态的知识点,那么只看这一篇就足够了!)
|
10天前
|
Java 数据安全/隐私保护
Java基础之类封装、继承、多态
Java基础之类封装、继承、多态
13 4
|
10天前
|
Java 数据安全/隐私保护
Java基础之类封装、继承、多态
Java基础之类封装、继承、多态
10 2
|
10天前
|
Java 数据安全/隐私保护 开发者
Java是一种完全支持面向对象编程的语言,其面向对象特性包括封装、继承、多态和抽象等
【6月更文挑战第18天】**面向对象编程(OOP)通过对象封装状态和行为,实现问题域的抽象。Java全面支持OOP,核心特性包括**: - **封装**:保护数据安全,隐藏内部细节。 - **继承**:子类继承父类属性和行为,促进代码重用。 - **多态**:一个接口多种实现,增强灵活性和扩展性。 - **抽象**:通过接口和抽象类抽离共性,简化复杂性。 **Java的OOP便于理解和解决复杂系统问题。**
22 3
|
10天前
|
安全 Java 数据安全/隐私保护
Java基础之类封装、继承、多态
Java基础的封装、继承和多态是OOP的核心。封装通过访问控制(如private)隐藏类的内部细节,提供公共接口供外部交互。例如,`Person`类封装`name`和`age`,通过`getName()`和`setAge()`方法访问。继承允许子类(如`Dog`)继承父类(如`Animal`)的属性和方法,并可扩展或覆盖。多态使得父类引用可指向子类对象,调用方法时根据实际对象类型执行,如不同动物的`makeSound()`。接口实现多态提供了一种定义行为而不必关心实现的方式。向上转型(子类→父类)安全且默认,而向下转型(父类→子类)需类型检查以避免异常。
10 1
|
10天前
|
安全 Java 开发者
类与对象:Java中的封装、继承与多态
Java面向对象三大特性:封装(隐藏对象细节,增强安全与复用),继承(代码复用与扩展,如Dog继承Animal),多态(统一接口,不同实现,如Playable接口的Piano和Guitar)。通过示例展示了如何在实践中应用这些概念。【6月更文挑战第16天】
18 2