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();
    }
}

目录
相关文章
|
算法 Java 程序员
在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
183 9
|
Java 开发者
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
99 7
|
Java 开发者
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
107 5
|
Java 程序员
让我们一起探讨Java多态的奥秘,看看它是如何打破“一刀切”的局限,让我们的代码更加生动多彩
让我们一起探讨Java多态的奥秘,看看它是如何打破“一刀切”的局限,让我们的代码更加生动多彩
95 5
|
6月前
|
Java 编译器 程序员
java中重载和多态的区别
本文详细解析了面向对象编程中多态与重载的概念及其关系。多态是OOP的核心,分为编译时多态(静态多态)和运行时多态(动态多态)。编译时多态主要通过方法重载和运算符重载实现,如Java中的同名方法因参数不同而区分;运行时多态则依赖继承和方法重写,通过父类引用调用子类方法实现。重载是多态的一种形式,专注于方法签名的多样性,提升代码可读性。两者结合增强了程序灵活性与扩展性,帮助开发者更好地实现代码复用。
227 0
|
9月前
|
Java
Java 面向对象编程的三大法宝:封装、继承与多态
本文介绍了Java面向对象编程中的三大核心概念:封装、继承和多态。
483 15
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
322 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
Java 编译器
Java——类与对象(继承和多态)
本文介绍了面向对象编程中的继承概念,包括如何避免重复代码、构造方法的调用规则、成员变量的访问以及权限修饰符的使用。文中详细解释了继承与组合的区别,并探讨了多态的概念,包括向上转型、向下转型和方法的重写。此外,还讨论了静态绑定和动态绑定的区别,以及多态带来的优势和弊端。
282 7
Java——类与对象(继承和多态)
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)