今日内容
接口
多态
接口interface
接口的概述
接口是比抽象类还抽象的类,因为接口所有的方法都是抽象方法
接口的由来
可以解决Java中类单一继承的局限性
格式:
interface 接口名 {
}
使用
implements ,类去实现接口
接口中成员的特点
成员变量
只有常量
默认的修饰符 public static final
成员方法
只有抽象方法,没有非抽象方法
默认修饰符 public abstract
构造方法
没有构造方法
类与接口之间的关系
类与类:继承关系(extends),单一继承,多层继承
类与接口:类实现(implements)接口(interface),一个类可以实现多个接口
接口与接口:继承关系(extends)多继承(一个接口可以继承多个接口),多层继承
接口的优点
(1)解决了单一继承的局限性
(2)对外提供规则
(3)降低了程序的耦合性(可以实现模块化开发,定义好规则,每个人实现自己的模块,提高了开发的效率)
接口与抽象类之间的区别
(1)定义上不同
接口是interface关键字定义的
抽象类是abstract class关键字定义的
(2)与类之间的关系不同
接口与类,类实现接口,可以多实现
抽象类与类,继承关系,只能单一继承,不能多继承,但是可以多层继承
(3)成员的不同
成员变量
接口:没有成员变量,只可以有常量,默认修饰符public static final
抽象类:可以有成员变量,也可以有常量
成员方法
接口:没有非抽象方法,只可以有抽象方法,它的抽象方法是有默认修饰的,public abstract
抽象类:既可以有非抽象方法,也可以有抽象方法,它的抽象方法是没有默认修饰符的
构造方法
接口:没有构造方法
抽象类:有构造方法,为子类提供
面向对象的三大特征:
封装
继承
多态
多态
什么是多态:多态就是一个事物的多种形态,比如水可以是水,也可以成为冰;猫是一只猫,也是动物
苏轼曰:横看成岭侧成峰,远近高低各不同
Java中的多态表现在父类的引用指向子类的对象,比如Animal a = new Cat();
A:普通类多态定义的格式
B:抽象类多态定义的格式
C:接口多态定义的格式
多态的前提:
(1)有继承或者实现关系
(2)有方法重写
(3)父类的引用指向子类的对象
多态中成员的特点
Animal a = new Cat();
成员变量
编译时看左边(父类),运行时看左边(父类)
成员方法(非静态方法)(动态绑定)
编译时看左边(父类),运行时看右边(子类)
静态方法
编译看左边(父类),运行时看左边(父类)
简而言之:编译看左边(父类),运行时成员方法(非静态方法)看的是右边,其他(成员变量和静态的方法)看的都是左边
引用类型的类型转换
向上转型:由小的类型转为大的类型
Animal a = new Cat();
向下转型:由大的类型转为小的类型
Cat c = (Cat)a;
ClassCastException类型转换异常,将一种类型转为另一种类型,而这两种类型不是同一种类型或者不是父类型
多态的优缺点:
优点:
提高了代码的可维护性
提高了代码的可扩展性
缺点:
多态之后不能访问子类特有的成员
instancof 运算符,instancof也是一个关键字
作用是判断运算符前面的对象(或者对象名)是否是运算符后面的一种类型
格式:
对象(对象名) instanceof 类型
注意:instanceof的使用并不是任意的对象和类型都能放在一起进行判断的,对象的类型和运算符后面的类型必须要有子父类关系,
否则的话,编译都不能通过