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


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


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

相关文章
|
21天前
|
Java 开发工具 Android开发
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
本系列教程笔记详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。若需快速学习Kotlin,建议查看“简洁”系列教程。本期重点介绍了Kotlin与Java的共存方式,包括属性、单例对象、默认参数方法、包方法、扩展方法以及内部类和成员的互操作性。通过这些内容,帮助你在项目中更好地结合使用这两种语言。
38 1
|
23天前
|
Java 开发工具 Android开发
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
30 2
|
21天前
|
Java 编译器 Android开发
Kotlin语法笔记(28) -Kotlin 与 Java 混编
本系列教程详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。对于希望快速学习Kotlin的用户,推荐查看“简洁”系列教程。本文档重点介绍了Kotlin与Java混编的技巧,包括代码转换、类调用、ProGuard问题、Android library开发建议以及在Kotlin和Java之间互相调用的方法。
18 1
|
21天前
|
安全 Java 编译器
Kotlin语法笔记(27) -Kotlin 与 Java 共存(二)
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。若需快速入门,建议查阅“简洁”系列教程。本文重点探讨Kotlin与Java共存的高级话题,包括属性访问、空安全、泛型处理、同步机制及SAM转换等,助你在项目中逐步引入Kotlin。
18 1
|
22天前
|
Java 编译器 Android开发
Kotlin语法笔记(28) -Kotlin 与 Java 混编
Kotlin语法笔记(28) -Kotlin 与 Java 混编
24 2
|
24天前
|
存储 Java 测试技术
Java零基础-多态详解
【10月更文挑战第10天】Java零基础教学篇,手把手实践教学!
19 4
|
27天前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
41 3
|
22天前
|
安全 Java 编译器
Kotlin语法笔记(27) -Kotlin 与 Java 共存(二)
Kotlin语法笔记(27) -Kotlin 与 Java 共存(二)
29 0
|
4月前
|
搜索推荐 Java 编译器
【Java探索之旅】多态:重写、动静态绑定
【Java探索之旅】多态:重写、动静态绑定
30 0
|
Java 程序员 C++
java面向对象编程_包_继承_多态_重载和重写_抽象类_接口_this和super(3)
java面向对象编程_包_继承_多态_重载和重写_抽象类_接口_this和super(3)
205 0
java面向对象编程_包_继承_多态_重载和重写_抽象类_接口_this和super(3)