java基础打卡28

本文探讨了多态在编程中的关键作用,通过实例展示如何利用向上转型和向下转型增强代码的灵活性。通过讲解员工、讲师和助教类的多态应用,突出了其在继承和接口实现中的优势,以及如何避免向上转型可能导致的问题并借助instanceof检查类型。
摘要由CSDN通过智能技术生成

使用多态的好处

员工:work();//抽象
extends或implements
讲师类:work() {讲课}		助教类:work() {辅导}

如果不用多态,只用子类,那么写法是:
【Teacher】 one = new Teacher();
one.work();//讲课
【Assistant】 two = new Assistant();
two.work();//辅导

我现在唯一要做的事情,就是调用work方法,其他的功能不关心。

如果使用多态的写法,对比一下:
【Employee】 one = new Teacher();
one.work();//讲课
【Employee】 two = new Assistant();
two.work();//辅导

好处:无论右边new的时候换成哪个子类对象,等号左边调用方法都不会变化。

对象的上下转型

动物:eat();//抽象
猫:eat() {}
狗:eat() {SHIT}

1. 对象的向上转型,其实就是多态写法:
【格式:父类名称 对象名 = new 子类名称();】		Animal animal = new Cat();
含义:右侧创建了一个子类对象,把它当作父类来看待使用。	创建了一直猫,当作动物看待,没问题。
注意事项:【向上转型一定是安全的】。从小范围转向了大范围,从小范围的猫,向上转换成为了更大范围的动物。

类似于:
double num = 100;//正确,int --> double,自动类型转换。

2. 对象的向下转型,其实就是一个【还原】的动作。
【格式:子类名称 对象名 = (子类名称) 父类对象;】
含义:将父类对象,【还原】成为本来的子类对象。

Animal animal = new Cat();//本来是猫,向上转型成为动物
Cat cat = (Cat) animal;//本来是猫,已经被当作动物了,还原回来成为本来的猫
【注意事项】:
a. 必须保证对象本来创建的时候,就是猫,才能向下转型成为猫。				本来是猫,还原为猫
b. 如果对象创建的时候本来不是猫,现在非要向下转型成为猫,编译不会报错,但是运行会出现异常。【java.lang.ClassCastException 类转换异常】	本来是猫,当作狗,错误!

类似于:int num = (int) 10.0;//可以	int num = (int) 10.5;//不可以,精度损失

instanceof关键字

向上转型一定是安全的,没有问题的,正确的。但是也有一个弊端:
对象一旦向上转型为父类,那么就无法调用子类原本特有的内容。

解决方案:用对象的向下转型【还原】。

如何才能知道一个父类引用的对象,本来是什么子类?
格式:
对象 instanceof 类名称
这将会得到一个boolean值结果,也就是判断前面的对象能不能当作后面类型的实例。
例如:	Animal animal = new Dog();//本来是一只狗
        if (animal instanceof Dog) {
            Dog dog = (Dog) animal;
            dog.watchHouse();
        }
        // 如果希望调用子类特有方法,需要向下转型
        // 判断一下父类引用animal本来是不是Dog

笔记本USB接口案例练习

  • 案例分析
笔记本电脑类:开机powerOn()	关机powerOff()	使用设备useDevice(USB usb)	使用接口
USB接口:打开设备	关闭设备
鼠标类:打开鼠标	关闭鼠标		实现接口
键盘类:打开键盘	关闭键盘		实现接口
  • USB接口
public interface USB {
    public abstract void open();//打开设备
    public abstract void close();//关闭设备
}
  • 鼠标类
    鼠标就是一个USB设备
public class Mouse implements USB{
	// 覆盖重写USB接口中的全部抽象方法
    @Override
    public void open() {
        System.out.println("打开鼠标");
    }
    @Override
    public void close() {
        System.out.println("关闭鼠标");
    }
    public void click() {
        System.out.println("鼠标点击");
    }
}
  • 键盘类
    键盘也是一个USB设备,代码与鼠标相同,把需要打印输出的语句改变即可:打开键盘、关闭键盘、键盘输入
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值