今天是第七天,我们来学点比较重要的东西,那就是继承跟多肽,在java面向对象三大特性中 有封装 继承 多肽。之前我们已经学过封装,也了解一点继承,今天详细来说明这两个特性。以后面试问道你面向对象三大特性 也能回答的上来。
第二章中我们就有了解过继承
为了不用必须维护正方形 圆形 三角形 阿基米虫 4个类的rotate 和playSound方法,我们之前抽像出来一个shape的类,里面有rotate playsound两个方法,而那个四个类只要继承shape,就可以实现rotate 和playSound。那么shape就是四个类的父类,四个类就是shape的子类。
优点1: 如果rotate方法有什么变化的话,只要修改父类的rotate的方法就可以,其他四个类就不需要维护。
优点2: 而如果四个类playSound方法的不一样的话,那么只需要在对应的类里面重写playplaySound方法就可以。
例1 :父类 shape的playSound方法中 播放的是 情歌王 其他四个类,square 和circle triangle 都是播放情歌王,amoeba 播放的是 独家记忆 那么三个类都不要修改,只需要 重写amoeba 的 playSoundfang方法
class Shape {//父类
public void rotate(){
//旋转180°
System.out.println("旋转180度-----" );
}
public void playSound(){
System.out.println("play 情歌王-----" );
}
}
public class Amoeba extends Shape{// 子类 阿基米虫类
public void playSound(){//重写playSound方法
System.out.println("play 独家记忆");
}
public static void main(String[] args) {
Amoeba amoeba = new Amoeba();
amoeba.playSound();//主函数中执行playSound();
amoeba.rotate();//主函数中执行rotate();
}
}
执行过程
便于理解 我把继承关系,比作玄幻小说里妖兽父子之间关系,一只很厉害的凤凰 它有强大血统,魔法抗性(属性),以及几个法术,涅盘浴火重生,呼风唤雨,空间切割(方法),那么它的几个孩子(朱雀 青鸾 孔雀)就可以完整继承它的属性,方法。并且可能开发出新的法术(方法),可能因为环境 后期原因(不同需求)后代们 改进了法术(重写方法)
这里我们的观念要转变下,在中国传统文化中,父辈,老师都是比子辈强大博学。而在西方中,他们认为子辈会比先辈强,因为我们是站在巨人的肩上学习,我是比较认可后者的,比如像写代码,前人从研究电开始,设计芯片,制作电脑,研究开发软件,一步步的封装好,我们只要在电脑对应的编译软件上写代码就好,而不用从发明电开始。可能几十年后,封装 继承越来越普遍 人们出行越来越方便 越廉价 越重复的劳动力 将会被替代 无人驾驶 代替 司机 代驾,人脸识别代替保安 ,一切都是有可能的。
在书中170页有个继承的设计,给我们讲述了继承是怎么设计的
这边比较浅显 一眼就能看出他们都属于 动物这个类,那么动物就是父类,这些就是子类,可是子类太多可以继续继承,将犬科动物 猫科动物 两栖动物 三个类抽象出来继承 动物类 而具体的六种动物根据特性分别继承 犬科动物 猫科动物 两栖动物三个类
在工作开发中,设计继承的时候,一定要记得父类越抽象,子类越具体,根据方法 属性 来设计。
继承到这里 你差不多都学会了,但是继承也是有很多弊端
首先我们需要明确,继承存在如下缺陷:
1、父类变,子类就必须变。
2、继承破坏了封装,对于父类而言,它的实现细节对与子类来说都是透明的。
3、继承是一种强耦合关系。
继承为了避免 冗余 (重复代码)肯定是耦合度(相互作用、相互影响)特别高.
从书中184-188页中认真看完就对多肽对象多态性有了个大概的了解这边我们不做详细展开。
只说明下方法的多态性
方法的多态性:
① 方法的重载:同一个方法名称,会根据传入参数的类型及个数不同执行不同的方法体;
② 方法的重写: 同一个方法,会根据子类的不同,实现不同的功能。
方法的重写我们已经例1中有过说明,这里主要讲方法的重载
在工作中重载的用处也是经常用到的,有时候一个方法多个地方使用,但是因为入参的类型不同应该怎么处理?这里就用到了重载,如上图的操作,addNums方法中因为入参有可能是int类型 或者double类型所有重载了addNums方法。
总结下 今天这章内容是个重点 知识点一共有继承 多肽 重写 重载。