目录
一、上集回顾
昨天我们学习了继承的相关概念及权限访问操作符的补充。学习日记:Java——继承-CSDN博客
二、本集目标
第一个是补充昨天继承中忘记讲且比较重要的一部分。其次是学习多态的相关概念,认识并能写出简单的多态代码
三、本篇正文
1、继承下的构造函数
当父类子类都没有构造函数的情况下,代码是正常的。
=========================== 分割线 =========================
当父类有构造函数子类没有构造函数就会报错,这是什么原因呢?会不会是子类没有构造函数造成的,我们给子类添加上构造函数试试。
??为什么给子类加了构造函数代码还报错,其实子类中除了我们自己添加的部分外还有继承父类的部分,这就意味着父类中含参的构造函数也给了子类,这个构造函数没有接收到参数自然就报错了。那么该怎么解决呢?很简单在子类的构造函数的第一行使用super关键字给它传参数。
上述是含参的构造函数,那么父类中含有无参的构造函数会怎样?
根据上图知:若父类具有无参的构造函数,子类不用super声明该构造函数也行。
2、继承下的代码块
还记得前天讲的代码块部分吗?三种代码块在执行上按静态代码块、实例化代码块、普通代码块的方式依次执行(详细请见:学习日记:Java类与对象2-CSDN博客)。那么在有继承关系下这些代码块会按照什么顺序执行呢?
根据运行结果可知,在具有继承关系下优先执行父类子类的静态化代码块,再执行父类的实例化代码块、构造代码块,最后执行子类的实例化代码块、构造代码块。
多次执行则静态代码块部分只运行一次,其余代码块照常。
3、多态的概念
简单来说就是同一件事不同的人干的结果不同。比如吃饭,饭量小的人吃的少些,饭量大的人吃的多些。
4、多态的条件(特征)
<1>、具有一父多子的继承体系。
<2>、子类对父类中的方法重写
<3>、通过对父类的引用进行重写
一父多子的继承体系很好理解,多个子类继承同一个父类即可。
子类对父类中的方法进行重写是什么鬼?子类我懂,父类我懂,方法我懂,重写是啥没听说过啊,重载倒是听说过。
重载中方法间的返回值类型、参数类型、参数数量、参数顺序不一样,方法名一样。重写则要求返回值类型、参数类型、参数数量、参数顺序、方法名一样,在运行过程中用子类方法的结果代替父类方法的结果。
另要注意:1.重写时子类对该方法访问权限要大于等于父类对该方法访问权限 2.父类中被static,private修饰的方法不能被重写
5、多态的演示:
6、向上转型
可以理解为创建一个子类将其当成父类使用。
语法格式:父类类型 + 对象名 = new 子类类型();
但要注意的是,不能调用子类特有的方法!
四、作者的话
关于多态还有个向下转型的知识点,由于本人尚未学会如何定义、使用故没写,明天补上。
写这篇日记对我来说受益匪浅理,清了很多知识点,并能将这些知识点转换成简单的代码。强烈建议大家在学习的过程中也写写学习日记发在咱们的CSDN上,可以@我去三连。最后感谢您的观看。