java学习day14---(多态)
2021/7/19 22:07:09
本文主要是介绍java学习day14---(多态),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
其他方法不能调用构造函数
子类的构造函数会隐式的调用父类的构造函数,必须的
静态方法可以继承,在静态方法中,不能使用supre调用其他方法,因为静态方法只能调用静态的属性和方法
多态(难点、重点)
同一个动作在不同的场合,会产生不同的效果
同一个方法,传递不同的参数,得到不同的结果
用抽象去代替具体
前提:1、继承 2、重写/覆盖
语法:
父类类型 对象名=new 子类类型();
只能调用重写的方法(调用子类别的方法不行)
对象名.重写方法() 调用的是重写的方法
例子:
class a extends b{}
b sc=new a();
sc.重写的方法 调用的是子类的重写方法
语法很简答,要理解多态!
多态不能调用子类的独有方法
解决方法:
首先要了解,引用类型转换问题:
class a extends b{}
b x=new a();
向上转型 :创建一个子类对象赋值给父类类型对象名
类似小转大 如:int a=0 ; double b= a;
向下转型:父类类型的变量赋值给子类类型的对象
为什么调用不了子类的独有方法?
因为 x的对象是b类的类型,b类的类型是不会有a类类型的独有方法的,因此调用不了
解决方法就是向下转型
把x从b类类型转成a类类型 强制类型转换符
a y=(a)x;
这样变量y就能调用 a类型的方法了
强制类型转换,会造成精度缺失和精度溢出
同理多态向下转型,会造成类型转换异常:ClassCasException
关键字:instanceof 判断某个变量应用的对象属不属于某种类型
y instanceof b 判断y这个对象名是不是存储的b类型的对象
逻辑总结:
多态:1、继承 2、重写 3、向上转型
因为向上转型,使父类对象名存储了一个子类的对象,导致父类对象名不能调用子类的独有方法
然后向下转型,使父类对象名转换成子类对象名,这样子类对象名存储了一个子类对象,这样就
可以调用子类的方法
但是这样有什么意义呢?直接创建子类对象赋值给子类的对象名不行吗?
多态有耦合度低的好处
如果调用的是子类重写的方法,使用多态更好 更便于维护
如果调用的是子类独有的方法,不使用多态
多态耦合问题
同一个动作,不同的场合,不同的结果
4.把类作为参数传递使用多态
5.把类作为返回值类型使用多态
创建对象和使用对象分离
创建对象交给其他类处理,使用对象在另一个类
6.简单工厂模式
水果类父类 子类:苹果、香蕉、葡萄
设计一个类专门用来创建对象
7.静态方法能继承不能被重写!
8.多态形式 父类 对象名=new 子类();
属性是不会覆盖的
如果调用属性,看等号左边---没有属性的重写
如果调用方法 看等号右边---方法可以被重写
9.里式代换原则(lsp)
父类出现的地方,子类都可以代替
如果参数是Object类型,就可以传递任何对象!
如果返回值是Object类型,就可以返回任何对象!
10.权限修饰符
类用 public
成员变量 private
构造函数以及自定义方法 public
private 只能在这个类中使用
默认的 不加权限修饰符 只能在同一个包中使用
protected 可以在不同的包中使用 并且是继承关系 父类和子类不在同一个包中
public 整个项目都可以用
这篇关于java学习day14---(多态)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-10百万架构师第十三课:源码分析:Spring 源码分析:Spring核心IOC容器及依赖注入原理|JavaGuide
- 2025-01-10便捷好用的电商API工具合集
- 2025-01-09必试!帮 J 人团队解决物流错发漏发的软件神器!
- 2025-01-09不容小觑!助力 J 人物流客服安抚情绪的软件!
- 2025-01-09为什么医疗团队协作离不开智能文档工具?
- 2025-01-09惊叹:J 人团队用啥软件让物流服务快又准?
- 2025-01-09如何利用数据分析工具优化项目资源分配?4种工具推荐
- 2025-01-09多学科协作难?这款文档工具可以帮你省心省力
- 2025-01-09团队中的技术项目经理TPM:工作内容与资源优化策略
- 2025-01-09JIT生产管理法:优化流程,提升竞争力的秘诀