JAVA面向对象高级部分—多态

面向对象高级部分—多态

认识多态

对象多态,对象既可以指向老师对象,也可以指向学生对象。
在这里插入图片描述

注意事项:
成员变量不谈多态,编译看左边,运行看左边
成员变量编译的是父类People,所以编译的是左边的People,运行也看左边(输出的父类People的成员变量值)
在这里插入图片描述

代码示例

在这里插入图片描述

对象多态和行为多态的输出结果,编译看左边,运行看右边
编译看左边(People),运行结果看右边(new的Teacher()类和Student()类)
示例如下:
在这里插入图片描述

使用多态的好处

在这里插入图片描述

优点代码示例

希望所有学生和老师一起参加比赛
在这里插入图片描述

弊端

无法直接调用子类的独有功能,只能调用继承父类的成员方法
这里new的是子类,故不存在直接用父类变量p1、p2调用父类。
在这里插入图片描述

多态下的类型转换问题

强制类型转换之后呢?将谁转换为神马东西:让对象的真实类型t与
在这里插入图片描述

解决上一节中多态的弊端—无法调用子类特有方法

强制转换前报错
强制转换的好处是调用子类的特有方法。
正常情况下父类无法转为子类,不能用子类构造父类的对象,会报错,如下:
在这里插入图片描述

强制转换的方法

强制类型转换方法
alt+回车键,点击红框进行强制转换
在这里插入图片描述

强制转换结果如下
在这里插入图片描述

强制转换存在的问题

在这里插入图片描述

在这里插入图片描述

instanceof关键字

instanceof关键字使用语法:p-对象名,Student—需要进行判断的类名
强制转换前进行当前对象的真实类型判断,再进行强制转换,避免出现强制转换的类型报错,代码示例如下:

在这里插入图片描述

总结

为什么强转,如何保证强转不会报错,强转的意义。
在这里插入图片描述

final

认识final

在这里插入图片描述

变量存储的地址不能改变,但地址所指向对象的内容可以改变
在这里插入图片描述

代码示例

工具类一般会加上final
1)修饰变量:只能赋值一次
修饰成员变量
在这里插入图片描述

修饰成员变量(静态成员变量)
在这里插入图片描述

补充知识:常量详解

在这里插入图片描述

static final 修饰的成员变量被称为常量
代码示例
在这里插入图片描述

抽象类

认识抽象类

代码示例
在这里插入图片描述

错误示例
有方法体会报错
在这里插入图片描述

抽象类的注意事项、特点

在这里插入图片描述

1)不能创建对象
(因为抽象类的方法没有方法体,无法访问抽象类的方法)
在这里插入图片描述
2)作为一个特殊的父类,给子类用
在这里插入图片描述

总结

在这里插入图片描述

使用抽象类的好处

每个子类都要重写父类的方法
在这里插入图片描述
代码示例
在这里插入图片描述

抽象类的常见场景:模板方法设计模式

在这里插入图片描述

解决了什么问题

减少重复代码
在这里插入图片描述

代码示例
在这里插入图片描述

使用final关键字

模板方法中使用final关键字,防止被重写
在这里插入图片描述

接口

接口概述

认识接口

接口中不能有构造器和创造对象。
在这里插入图片描述

1)成员常量(成员名最好大写)

在这里插入图片描述
在这里插入图片描述

2)成员方法

成员方法不能有方法体
在这里插入图片描述

接口的基本使用

接口支持实现多个接口,类只能继承一个类。
在这里插入图片描述

代码示例
在这里插入图片描述

接口的好处

1)弥补类的继承不足,子类继承父类的同时,还能实现多个接口。
A要重写接口的所有方法。
在这里插入图片描述
在这里插入图片描述

总结

在这里插入图片描述

接口的综合案例

在这里插入图片描述

接口的其他细节:JDK8开始,接口中新增的三种方法

原来的接口中只能定义一些常量和成员抽象方法,有了这三个新增方法后,接口内的方法可以有方法体了。
在这里插入图片描述

1、默认方法使用default修饰

在这里插入图片描述

2、私有方法,必须使用private修饰
在这里插入图片描述
接口外部不能直接访问
在这里插入图片描述

接口内部方法可以直接访问
在这里插入图片描述

3、静态方法:必须使用static修饰,默认会被public修饰
在这里插入图片描述

总结

在这里插入图片描述

接口的其他细节:接口的多继承、使用接口的注意事项

在这里插入图片描述

接口的多继承
在这里插入图片描述

接口的注意事项(了解)
在这里插入图片描述

1)被继承的接口中,存在方法名冲突,则不支持多继承
在这里插入图片描述

2)方法名冲突,优先使用父类
继承放在接口实现前面
在这里插入图片描述

3)一个类实现了多个接口,若多个接口中存在同名的默认方法,可以不冲突,这个类重写方法即可
在这里插入图片描述

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值