【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接口的类都能够使用相同的方法对列表进行操作。


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


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

相关文章
|
2月前
|
Java 开发工具 Android开发
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
本系列教程笔记详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。若需快速学习Kotlin,建议查看“简洁”系列教程。本期重点介绍了Kotlin与Java的共存方式,包括属性、单例对象、默认参数方法、包方法、扩展方法以及内部类和成员的互操作性。通过这些内容,帮助你在项目中更好地结合使用这两种语言。
50 1
|
2月前
|
Java 开发工具 Android开发
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
35 2
|
20天前
|
Java
java do while 的语法怎么用?
java do while 的语法怎么用?
34 3
|
2月前
|
Java 编译器 Android开发
Kotlin语法笔记(28) -Kotlin 与 Java 混编
本系列教程详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。对于希望快速学习Kotlin的用户,推荐查看“简洁”系列教程。本文档重点介绍了Kotlin与Java混编的技巧,包括代码转换、类调用、ProGuard问题、Android library开发建议以及在Kotlin和Java之间互相调用的方法。
31 1
|
2月前
|
安全 Java 编译器
Kotlin语法笔记(27) -Kotlin 与 Java 共存(二)
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。若需快速入门,建议查阅“简洁”系列教程。本文重点探讨Kotlin与Java共存的高级话题,包括属性访问、空安全、泛型处理、同步机制及SAM转换等,助你在项目中逐步引入Kotlin。
30 1
|
2月前
|
Java 编译器 Android开发
Kotlin语法笔记(28) -Kotlin 与 Java 混编
Kotlin语法笔记(28) -Kotlin 与 Java 混编
33 2
|
2月前
|
安全 Java 编译器
Kotlin语法笔记(27) -Kotlin 与 Java 共存(二)
Kotlin语法笔记(27) -Kotlin 与 Java 共存(二)
34 0
|
6天前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
36 6
|
21天前
|
设计模式 Java 开发者
Java多线程编程的陷阱与解决方案####
本文深入探讨了Java多线程编程中常见的问题及其解决策略。通过分析竞态条件、死锁、活锁等典型场景,并结合代码示例和实用技巧,帮助开发者有效避免这些陷阱,提升并发程序的稳定性和性能。 ####
|
19天前
|
存储 监控 小程序
Java中的线程池优化实践####
本文深入探讨了Java中线程池的工作原理,分析了常见的线程池类型及其适用场景,并通过实际案例展示了如何根据应用需求进行线程池的优化配置。文章首先介绍了线程池的基本概念和核心参数,随后详细阐述了几种常见的线程池实现(如FixedThreadPool、CachedThreadPool、ScheduledThreadPool等)的特点及使用场景。接着,通过一个电商系统订单处理的实际案例,分析了线程池参数设置不当导致的性能问题,并提出了相应的优化策略。最终,总结了线程池优化的最佳实践,旨在帮助开发者更好地利用Java线程池提升应用性能和稳定性。 ####
下一篇
DataWorks