java 继承、多态、抽象类与接口笔记(超级详细!) | java

发布于 2021-07-10  26 次阅读


前言

本篇是学习java所写的笔记,主要针对继承、多态、抽象类和接口

一、继承

1、继承的概念
在这里插入图片描述


父类子类关系图示
在这里插入图片描述


父类(超类)和子类例子
在这里插入图片描述

在继承关系中有两种不一样的关系
一种是Is-a
在这里插入图片描述
另一种是Has-a
在这里插入图片描述

2、继承的格式
在这里插入图片描述

3、java只支持单继承
因为多继承会出现二义性问题,如果出现下面这张图的情况,CDBurner和DVDBurner都继承了DigtialRecorder,又重写中DigtialRecorder的burn(),之后ComboDrive又多继承CDBurner和DVDBurner,那请问它现在burn()是继承自CDBurner还是继承自DVDBurner呢?这就会出现二义性
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210430091342188.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xMTExRWg==,size_16,color_FFFFFF,t_70
所以为了阻止这种情况发生,java规定类只能单继承,一个类只能有一个直接父类,可以有多个间接父类。但是多继承也有它的好处,所以如果要想实现多继承,java还有接口和内部类都可以帮助实现多继承。

4、继承的例子

父类
在这里插入图片描述
子类
在这里插入图片描述
测试
在这里插入图片描述

5、继承下的构造函数的调用次序
在这里插入图片描述
例子说明
可以看出先调用的是父类的构造函数再调用子类的构造函数
在这里插入图片描述

6、访问控制修饰符对继承的影响
在这里插入图片描述

7、变量的隐藏和方法的覆盖
在这里插入图片描述

8、super关键字
前面提到了super引用,现在来解释一下super关键字作用
在这里插入图片描述

注意这里的访问隐藏的成员变量不是指访问私有变量,对于private类型的变量和方法,super是无法引用的,这里是指如果方法或者变量在子类中被重写时如果直接用变量名访问,则子类的同名变量会隐藏父类的同名变量(这些变量可以是protected等但不能是private),而使用super.成员变量或者super.方法则可以明确指出要调用的是父类中的变量或方法。

例子说明上述作用
在这里插入图片描述
在这里插入图片描述

二、多态

1、多态的概念

多态性(Polymorphism)是由面向对象技术的封装性和继承性衍生出来的一个特性。多态就是指事物具有多种形态。
在Java中,多态性体现在两个方面:由方法重载实现的静态多态(编译时多态)和方法重写/覆盖实现的动态多态(运行时多态)
静态多态:在编译阶段,具体调用哪个被重载的方法,编译器会根据参数的不同来确定调用相应的方法。
动态多态:由于子类继承了父类所有的属性(私有的除外),所以子类对象可以作为父类对象使用。程序中凡是使用父类对象的地方,都可以用子类对象代替。一个父类对象引用变量 可以通过引用子类的对象 来调用子类中重写的方法。

在这里插入图片描述

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

2、类型转换
在这里插入图片描述

3、instanceof关键字
在这里插入图片描述

4、final关键字
在这里插入图片描述

static方法不能被覆盖例子:
在这里插入图片描述

三、抽象类

1、抽象类概念
在这里插入图片描述

2、抽象类的声明
在这里插入图片描述

3、抽象方法的声明明
在这里插入图片描述

4、抽象类例子
在这里插入图片描述

四、接口

1、接口的概念
在这里插入图片描述

2、接口的声明
在这里插入图片描述

3、类实现接口
在这里插入图片描述

例子:
在这里插入图片描述

4、接口应用实例
在这里插入图片描述
使用接口的核心原因:可以继承任意多个接口,并能够向上转型为多个基类型或接口,享受“多态”带来的灵活性;

5、接口和抽象类之间的关系
在这里插入图片描述

总结

以上就是我对java继承、多态、抽象类与接口的总结笔记,如果有什么疏漏或者错误的地方,请在评论区发表你的看法,非常感谢你阅读我的笔记