一、接口
(一)概述
1.广义:一切定义规则的事物都是接口
2.狭义:Java中用于定义方法声明的规则就是接口,Java的接口中,定义的所有方法都是抽象方法
3.好处:将方法的调用和方法的实现分开了,可以降低代码之间的耦合度,可以提高开发效率
(二)特点
1.定义格式
interface 接口名{}
2.接口编译之后也会生成一个.class文件
3.接口中只能定义抽象方法,不能有方法的实现
4.接口的实现:使用类,通过implements关键字类实现接口
(1)格式
class 类名 implements 接口名{}
(2)接口中只有规则没有实现,我们通过类去添加规则的实现,不同的类可以实现相同的接口,
给予接口不同的实现
5.接口不能创建对象,我们通过子类实现,子类创建对象调用方法
6.接口实现类的用途
(1)当接口的实现类实现了接口中所有的抽象方法,这个类就是一个普通类,可以创建对象调用
方法
(2)当接口的实现类没有实现了接口中所有的抽象方法,这个类就是一个抽象类,就需要进一步
的子类继承该抽象类,实现所有的抽象方法
(三)接口中成员的特点
1.成员变量:没有,接口中只能定义常量不能定义变量,当我们定义常量时,会默认加上public
static final
2.成员方法:有,只能是抽象方法,前面的public abstract可以省略,建议手动加上
3.构造方法:没有,因为没有成员变量,没有赋值的必要,所以没有构造方法
(四)类与类、类与接口、接口与接口
1.类与类:继承关系,使用extends关键字,支持单继承、多层继承
2.类与接口:实现关系,使用implements关键字
(1)支持:单实现,多实现,不支持多层实现
(2)单实现
class 类名 implements 接口名 { 实现接口中所有的抽象方法 }
abstract class 类名 implements 接口名 { 实现接口中部分抽象方法 }
(3)多实现
class 类名 implements 接口1, 接口2, 接口3... { 实现接口中所有的抽象方法 }
此格式不存在安全隐患,就算多个接口中有同名的方法,但是再同一个实现类中,能对应的方法体
只有一个,接口中只有方法的声明,没有引用
(4)一个类再实现多个接口的同时还能够继承一个类
class 子类类名 extends 父类类名 implements 接口1, 接口2, 接口3... { 实现接口中所有的抽象方法;
重写父类中继承来的方法; }
3.接口与接口
(1)支持单继承、多继承、多层继承
(2)接口的多继承格式
interface 接口 extends 接口1, 接口2, 接口3... { 相等于整合了声明上所有接口的抽象方法; }
4.设计思路
(1) 类一般定义事物固有的属性和行为
(2)接口一般用于定义事物通过扩展或者学习而来的功能
二、多态
(一)概述
1.事物的多种状态
2.对象的多态性:同一个对象,可能具有不同的名称,可以有不同类型的引用指向它。本质:同一
个对象,有不同的描述
3.类的多态性:同一个类型,可能有不同的子类实现,同一个类型的引用,可能会指向不同子类的
对象。本质:同一个名字和描述,可能在不同场景下有不同的实现
4.多态的前提
(1)要有继承
(2)要有方法的重写
(3)父类引用指向子类对象
(二)多态中成员变量的特点
1.编译看左边,运行看左边
2.编译看左边:如果左侧父类中没有定义相关的变量,编译就会报错
3.运行看左边:如果左侧父类中有对应的成员变量,就会执行父类中成员变量的值
(三)多态中成员方法的特点
1.编译看左边,运行看右边
2.编译看左边:如果左侧父类中没有定义相关的方法,编译就会报错
3.运行看右边:如果右侧对象所属类型中有相应的方法,就会执行对象所属类型的方法也就是子类
的方法
4.在访问成员方法时,进行动态绑定,判断当前对象到底属于哪个类型,就会去具体的绑定所属类
型的对象
5.动态绑定:在程序运行的过程中,会具体的判断当前对象到底属于哪个类型的对象,对象属于哪
个类型,就执行该类型中的方法
6.动态绑定只发生在运行期,所以编译期必须通过,动态绑定只针对非静态方法
(四)多态中静态方法的特点
1.编译看左边,运行看左边
2.最终解释
(1)静态变量:存储在方法区的静态区,被所有对象共享,不随着对象的变化而变化,所有的对
象具有相同的静态变量
(2)静态方法:只会根据引用所述的父类类型,来决定要运行的内容,和对象没有关系,不会随
着对象变化
(3)多态讨论的是对象的情况,静态和对象没有关系,所以静态成员只根据类来讨论,不用考虑
多态性
(五)类型转化
1.向下转型
(1)在多态中是父类引用指向子类对象,讨论的范畴是基于父类范畴的
(2)如果子类对象想要执行自己的所属类型特有的方法,就要从父类引用指向子类对象变为本类
引用指向本类对象
(3)格式:(目标类型)要转换的类型
2.向上转型
原本使用本类引用指向本类对象,变成了父类引用指向子类对象。本质:缩小了访问范围,减少了
访问权限
(六)多态的好处
1.提高了代码的可扩展性
2.在方法的参数列表中定义父类的引用,将来转入子类的对象都可以使用
3.在实际的开发过程中,对象的来源非常广泛,例如:自己new的对象;调用方法返回的对象;框
架底层利用反射机制自动创建的;人为填充的;如果使用之前本类引用指向本类对象,接收对应
的对象难度比较大,可以结合多态,保证接收的遍历
(七)instanceof
1.是一个关键字,是一个运算符,结果是一个布尔值
2.格式:A instanceof B
3.作用:A是一个对象,B是一个类型,用于判断A对象是否和B类型有关
4.有关
(1)A对象是B类型的对象
(2)A对象是B类型子类的对象