接口
接口可以视为一种标准。
是一种引用数据类型
格式:
public interface 接口名 {
}
接口的实现类
用类实现接口,并重写接口中所有抽象方法的方式称为实现
public class InterfaceImpl implements Interface {
@Override
//重写抽象方法
}
注意事项:
接口的实现类必须重写接口的所有抽象方法,否则就是一个抽象类
多实现
一个类可以实现多个接口
public class InterfaceImpl implements Interface1,Interface2 {
@Override
//重写抽象方法
}
常量
接口中的成员变量只能是常量,格式为
public static final 数据类型 常量名 = 数值;
注意事项:
常量名名称必须全部大写,用下划线连接
常量必须赋值
抽象方法
格式:
[public] [static] 返回值类型 方法名称();
注意事项:
如果实现类中实现的多个接口有重名的抽象方法,只重写一次
默认方法
作用:解决类升级时候,添加抽象方法导致实现类失效的问题
[public] default 返回值类型 方法名称() {方法体}
注意事项:
用对象.默认方法的方式调用
如果实现类中实现的多个接口有重名的默认方法,必须重写
静态方法
public static 返回值类型 方法名称() {方法体}
注意事项:
只能通过接口名.静态方法的方式调用
私有方法
只允许本接口调用的方法称为私有方法
普通私有方法:
private 返回值类型 方法名称() {方法体}
静态私有方法:
private static 返回值类型 方法名称() {方法体}
多继承
接口可以多继承
public interface Interface extends Interface1,Interface2 {
}
注意事项
接口没有构造方法(接口不能new对象)
如果父类的默认方法和接口的默认方法重名,优先用父类的默认方法
接口没有静态代码块
多态
以动物为例,动物下面有子类——猫,一只猫可以说是猫,也可以说成是动物、这种可以以不同类型描述一个对象的特性称为多态
前提
1、继承关系/实现关系
2、方法重写
3、父类引用创建子类对象
格式
父类名/接口名 对象名 = new 子类名/实现类名();
使用
访问成员变量
访问时,只能访问父类的成员变量
访问成员方法
访问时,访问子类的成员方法
向上转型
将子类对象转为父类对象的过程称为向上转型
其实就是上述多态写法
注意事项:
向上转型一定是安全的;
向上转型可以是自动的(例如父类作为参数时,将子类传参是可以自动转)
向下转型
将父类对象转为子类对象的过程称为向下转型
格式
子类名 子类对象 = (子类名) 父类对象
注意事项:
向下转型和向上转型必须是相互的,只能原先是这个子类转为的父类才能转回该子类。
instanceof
用instanceof关键字可以知道该类是否属于某个子类
这样可以确保向下转型正确