【JavaSE】Java基础语法(二十):多态

简介: 1. 多态的概述什么是多态同一个对象,在不同时刻表现出来的不同形态多态的前提要有继承或实现关系要有方法的重写要有父类引用指向子类对象

1. 多态的概述

9178e51a388145518d2da8af5fcebd44.png

  • 什么是多态
  • 同一个对象,在不同时刻表现出来的不同形态
  • 多态的前提
  • 要有继承或实现关系
  • 要有方法的重写
  • 要有父类引用指向子类对象
  • 代码演示
class Animal {
  public void eat(){
    System.out.println("动物吃饭");
  }
}
class Cat extends Animal {
  @Override
  public void eat() {
    System.out.println("猫吃鱼");
  }
}
public class Test1Polymorphic {
  /*
    多态的前提:
    1. 要有(继承 \ 实现)关系
    2. 要有方法重写
    3. 要有父类引用, 指向子类对象
    */
  public static void main(String[] args) {
    // 当前事物, 是一只猫
    Cat c = new Cat();
    // 当前事物, 是一只动物
    Animal a = new Cat();
    a.eat();
  }
}

2 .多态中的成员访问特点

  • 成员访问特点
  • 成员变量
  • 编译看父类,运行看父类
  • 成员方法
  • 编译看父类,运行看子类
  • 代码演示
class Fu {
  int num = 10;
  public void method(){
    System.out.println("Fu.. method");
  }
}
class Zi extends Fu {
  int num = 20;
  public void method(){
    System.out.println("Zi.. method");
  }
}
public class Test2Polymorpic {
  /*
    多态的成员访问特点:
    成员变量: 编译看左边 (父类), 运行看左边 (父类)
    成员方法: 编译看左边 (父类), 运行看右边 (子类)
  */
  public static void main(String[] args) {
    Fu f = new Zi();
    System.out.println(f.num);
    f.method();
  }
}


3. 多态的好处和弊端

  • 好处
  • 提高程序的扩展性。定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型
    参与操作
  • 弊端
  • 不能使用子类的特有成员

4. 多态中的转型

  • 向上转型
  • 父类引用指向子类对象就是向上转型
  • 向下转型
  • 格式:子类型 对象名 = (子类型)父类引用;
  • 代码演示
Zi z = (Zi) f;

5. 多态中转型存在的风险和解决方案 (应用)

  • 风险
  • 如果被转的引用类型变量,对应的实际类型和目标类型不是同一种类型,那么在转换的时候就会出现 ClassCastException

解决方案

  • 关键字
  • instanceof
  • 使用格式
  • 变量名 instanceof 类型
  • 通俗的理解:判断关键字左边的变量,是否是右边的类型,返回boolean类型结果
if(a instanceof Dog){
  Dog dog = (Dog) a;
  dog.watchHome();
}

6. 多态的实用价值

多态在面向对象编程中有着广泛的使用价值,主要表现在以下方面:

可替换性:多态允许子类对象替换父类对象,并且可以调用覆盖了父类方法的子类方法。这样可以极大地增加代码的可复用性和可扩展性。


灵活性:通过多态,一个超类对象可以调用子类对象的方法,从而使代码更加灵活和易于扩展。程序员只需要引用超类对象而不是具体的子类对象,就能够避免对代码进行大量修改的情况。


统一性:通过多态性,所有继承自父类的子类都能以相同的方式处理,从而增强了代码的可维护性和可读性。例如,在Java的集合框架中,所有实现了List接口的类都能够使用相同的方法对列表进行操作。


可扩展性:通过多态,我们可以很容易地扩展应用程序的功能。例如,我们可以创建新的子类,并覆盖它们的父类方法,从而为应用程序添加新的功能,而无需改变现有的代码。


多态是面向对象编程中非常重要的概念,它可以使软件系统更加灵活和可扩展,同时还可以提高代码的可读性、可维护性和可复用性,从而降低软件开发的成本。

相关文章
|
15天前
|
Java
Java中的继承和多态是什么?请举例说明。
Java中,继承让子类继承父类属性和方法,如`class Child extends Parent`,子类可重写父类方法。多态允许父类引用指向子类对象,如`Animal a = new Dog()`,调用`a.makeSound()`会根据实际对象类型动态绑定相应实现,增强了代码灵活性和可扩展性。
10 0
|
22天前
|
搜索推荐 Java
Java的面向对象特性主要包括封装、继承和多态
【4月更文挑战第5天】Java的面向对象特性主要包括封装、继承和多态
15 3
|
1月前
|
Java
【Java】一个简单的接口例子(帮助理解接口+多态)
【Java】一个简单的接口例子(帮助理解接口+多态)
17 0
|
1月前
|
存储 Java 容器
JAVA基本语法
JAVA基本语法
15 0
|
3天前
|
Java 程序员 编译器
JavaSE&Java8 Lambda 表达式
JavaSE&Java8 Lambda 表达式
|
3天前
|
存储 Java 程序员
JavaSE&Java的异常
JavaSE&Java的异常
19 0
|
3天前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
3天前
|
存储 安全 Java
滚雪球学Java(19):JavaSE中的内存管理:你所不知道的秘密
【4月更文挑战第8天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
30 4
滚雪球学Java(19):JavaSE中的内存管理:你所不知道的秘密
|
15天前
|
存储 安全 Java
Java语法掌握:打好编程基础的关键(二)
Java语法掌握:打好编程基础的关键
52 0
|
15天前
|
存储 Java
Java语法掌握:打好编程基础的关键(一)
Java语法掌握:打好编程基础的关键
15 0
Java语法掌握:打好编程基础的关键(一)