JavaSE个人学习心得(十)

本文详细介绍了Java中的多态性概念,包括其前提条件、特点以及应用场景。多态性允许一个对象在不同时刻表现出不同形态,提高代码的扩展性。通过实例展示了多态创建对象时成员变量和方法的调用规则,并讨论了转型的安全隐患及解决方案,如使用`instanceof`关键字。此外,还提及了多态在API使用和设计中的重要性,以及其在代码灵活性和可维护性上的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多态

一个对象, 在不同时刻体现出的不同种形态
多态的介绍

  • 程序员类Coder
  • 员工类Employee

// new Coder(); 才是真正的对象
Coder c = new Coder(); // 当前这个对象, 是一个程序员
Employee e = new Coder(); // 当前这个对象, 是一个员工

多态的前提条件
  • 要有继承\实现关系
  • 要有方法重写
  • 要有父类应用子类对象
多态创建对象- 调用成员特点
class Fu {
	int num = 10;
	
	public void show(){
		System.out.println("show...fu");
	}
	
}

class Zi extends Fu {
	int num = 20;
	
	@Override
	public void show(){
		System.out.println("show...Zi");
	}
}
  • 多态创建对象,调用成员变量
    编译看左边,运行看左边(左边父类,右边是子类)

Fu f = new Zi();
System.out.println(f.num); // 10
原因: 当前是父类的引用, 所以访问的空间就很局限, 只能看到堆内存中, super那块空间的数据

  • 多态创建对象,调用成员方法
    编译看左边,运行看右边
Fu f = new Zi();
f.show();		// show...Zi

问题: 为什么一定会执行子类的逻辑呢?
回答: 担心父类的方法, 是一个抽象方法, 抽象方法没有逻辑可以执行.
好处与弊端
  • 好处
    提高了代码的扩展性 :

  • 弊端

  • 不能调用子类特有的成员 (变量, 方法)

  • 解决方案 :

    • 重要的思路 : 如果你的目标, 只是为了调用子类特有的内容, 干脆直接创建子类对象去 !
      • 一般多态创建对象之后, 只会调用共性的内容
    • 另外的方案 : 向下转型
转型
  • 向上转型
    父类引用指向子类对象
    Fu f = new Zi();
  • 向下转型
    从父类的引用那里, 转换回子类的类型
    Zi z = (Zi)f;

转型中的安全隐患问题 :

  • ClassCastException : 类型转换异常
  • 在引用数据类型当中, 实际类型和目标类型不匹配, 就会出现此异常

Animal a = new Dog();
Cat c = (Cat)a; // ClassCastException

instanceof 关键字
  • 作用 : 可以避免, 多态向下转型的安全隐患
  • 介绍 : 判断左边的引用, 是否是右边的类型
if(a instanceof Dog){

}else if(a instanceOf Cat){

}
多态的使用
  • 调用别人写好的方法 :

    • 思路 : 如果调用方法的时候, 发现人家管我要的是一个接口, 那我就应该传入实现类对象
  • 自己设计多态的方法 :

    • 可以将方法的形参定义为父类类型, 这个方法就能接收任意子类对象了

API(应用程序编程接口)

  • 什么是API

    ​ API (Application Programming Interface) :应用程序编程接口

  • java中的API

    ​ 指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值