java.抽象、接口
抽象
如果父类当中的方法不确定如何进行{}方法体实现,那么这就应该是一个抽象方法
定义
抽象方法:在返回值前加上abstract关键字,然后去掉大括号,分号直接结束。
抽象类:抽象方法所在的类,必须是抽象类才行。在class前写上abstract。
如何使用
1、不能直接创建new抽象类对象
2、必须用一个类来继承抽象父类
3、子类必须覆盖重写抽象父类当中所偶遇的抽象方法
覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后补上方法体括号
4、创建子类对象进行使用
注意事项
1、抽象类不能创建对象,如果创建,编译无法通过则报错,自能创建其非抽象子类的对象
2、抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的
3、抽象类中不一定包含抽象方法,但是抽象方法的类必定时抽象类
4、抽象类的子类,必须重写抽象类中所有的抽象方法,否则编译无法通过而报错。除非该子类也是抽象类。
接口
接口就是多个类的公共规范
接口是一种引用数据类型,最重要的内容就是其中的:抽象方法
接口的定义格式:
public interface 接口名称{
//接口内容
}
接口中包含的内容有:
java7:
1、常量
2、抽象方法
java8:
3、默认方法
4、静态方法
java9:
5、私有方法
接口抽象方法的使用
1、接口不能直接使用,必须有一个”实现类“来”实现“该接口
public class 实现类名称 implements 接口名称{
// ...
}
2、接口的实现类必须覆盖重写(实现)接口中所以的抽象方法
3、创建实现类的对象,进行使用
注意:如果实现类并没有覆盖重写接口中所有的抽象方法,那么这个实现类就必须自己是抽象类
接口默认方法的使用
从java 8 开始,接口里允许定义默认方法
格式:
public default 返回值类型 方法名称(参数列表){
方法体
接口当中的默认方法可以解决接口的升级问题
}
接口静态方法的使用
从java8 开始, 接口里允许定义静态方法
格式:
public static 返回值类型 方法名称(参数列表){
方法体
}
提示:就是将abstract或者default换成static即可,带上方法体
注意:不能通过接口实现类的对象来调用接口当中的静态方法
正确用法:通过接口名称,直接调用其中的静态方法
格式:
接口名称.静态方法名(参数);
接口私有方法的使用
从java9开始,接口当中允许定义私用方法
1、普通私用方法,解决多个默认方法之间重复代码问题
格式:
private 返回值 方法名称(参数列表){
方法体
}
2、静态私有方法,解决多个静态方法之间重复代码问题
格式:
private static 返回值类型 方法名称(参数列表){
方法体
}
接口常量的定义和使用
接口当中也可以定义“成员变量”,但是必须使用public static final三个关键字进行修饰
格式:
public stataic final 数据类型 常量名称 = 数据值;
备注:一旦使用final关键字进行修饰,说明不可改变
注意事项:
1、接口当中的常量,可以省略public stataic final
2、接口当中的常量,必须进行复制;不能不赋值
3、接口当中的常量的名称,使用完全大写的字母,用下划线进行分隔
接口的知识小结
在java9开始,接口的内容有:
1、成员变量其实就是常量,格式:
[public][static][final] 数据类型 常量名称 = 数据值;
注意:
常量必须进行赋值,而且一旦赋值不能改变
常量名称完全大写,用下划线进行分隔
2、接口中最重要的就是抽象方法,格式:
[public][abstract] 返回值类型 方法名称(参数列表);
注意:实现类必须覆盖重写接口所有的抽象方法,除非实现类是抽象类
3、从java8开始,接口里允许定义默认方法,格式:
[public] default 返回值类型 方法名称(参数列表){方法体}
注意:默认方法也可以被福海重写
4、从java8开始,接口里允许定义默认静态方法,格式:
[public] static 返回值类型 方法名称(参数列表) {方法体}
注意:应该通过接口名称进行调用,不能通过实现类对象调用接口静态方法
5、从java 9开始,接口里允许定义私有方法,格式:
普通私有方法:private 返回值类型方法名称(参数列表){方法体}
静态私有方法:private static 返回值类型方法名称(参数列表){方法体}
注意:private的方法只用接口自己才能调用,不能被实现或别人使用