接口的特点
接口就是一种公共的规范标准
接口的使用
MyInterface.java
public interface MyInterface {
public abstract void usb();
//定义一个usb接口
public abstract void usb3();
//定义一个usb3.0接口
}
接口的实现
MyInterfaceImpl.java
public class MyInterfaceImpl implements MyInterface{
@Override
public void usb() {
System.out.println("实现了usb接口的功能");
}
@Override
public void usb3() {
System.out.println("实现了usb3.0接口的功能");
}
}
接口的使用
Demo1Interface.java
public class Demo1Interface {
public static void main(String[] args) {
MyInterfaceImpl impl = new MyInterfaceImpl();
impl.usb();
impl.usb3();
}
}
接口中的功能实现版本要求
java7 常量和抽象方法
java8 默认方法和静态方法
java9 私有方法
接口中的默认方法
接口覆盖重写必须要把基类的抽象方法全部写上
如果接口需要新的功能必然导致原有的功能无法使用,这时候可以使用默认方法
MyInterface.java
public abstract void usb3();
//定义一个usb3.0接口
//public void usb4();
//如果新添加一个usb4的功能必然导致 之前实现它的类无法使用
public default void usb4(){
System.out.println("在默认方法中新添加usb4的 方法 且不会影响到原来的类");
}
接口中的静态方法使用
MyInterface.java
public default void usb4(){
System.out.println("在默认方法中新添加usb4的 方法 且不会影响到原来的类");
}
public static void usb5(){
System.out.println("这是一个静态方法");
System.out.println("也是和默认方法一样需要写括号体{}");
}
接口静态方法的使用
Demo1Interface
public static void main(String[] args) {
MyInterfaceImpl impl = new MyInterfaceImpl();
impl.usb();
impl.usb3();
MyInterface.usb5(); //静态方法不归对象 归类
}
接口的私有方法
MyInterface.java
//在默认方法中 如果有两个方法有大量重复代码这个时候可以用私有方法
public default void methodA(){
System.out.println("a方法特有的代码");
System.out.println("吃饭");
System.out.println("睡觉");
System.out.println("跑步");
System.out.println("学习");
}
public default void methodB(){
System.out.println("B方法特有的代码");
System.out.println("吃饭");
System.out.println("睡觉");
System.out.println("跑步");
System.out.println("学习");
}
//解决方法
java版本必须 > 9
//在默认方法中 如果有两个方法有大量重复代码这个时候可以用私有方法
public default void methodA(){
System.out.println("a方法特有的代码");
method();
}
public default void methodB(){
System.out.println("B方法特有的代码");
method();
}
private void method(){
System.out.println("吃饭");
System.out.println("睡觉");
System.out.println("跑步");
System.out.println("学习");
}
//静态方法
//在默认方法中 如果有两个方法有大量重复代码这个时候可以用私有方法
public static void methodA(){
System.out.println("a方法特有的代码");
method();
}
public static void methodB(){
System.out.println("B方法特有的代码");
method();
}
private static void method(){
System.out.println("吃饭");
System.out.println("睡觉");
System.out.println("跑步");
System.out.println("学习");
}
接口的常量定义和使用
接口也可以定义成员变量 但是必须要使用public static final三个关键词来修饰
格式 [ public static final ] NUM= 10;
常量 一旦赋值无法修改 (修饰符可以不写 效果一样)
常量推荐用全大写 且用_ 下划线分割
总结
1.成员变量其实就是常量
[public static final ] 数据类型 常量名称 = 值
注意:
常量必须赋值,一旦赋值不能改变
常量名称完全大写且用下划线进行分割
2.接口中最重要的就是抽象方法
public abstract 返回值类型 方法名称(参数列表);
注意:
实现类必须覆盖重写接口所有抽象方法,除非实现类还是抽象类
3.从java8开始接口里允许定义默认方法
public default 返回值类型 方法名称(参数列表){ 方法体;}
注意:
默认方法也可以被覆盖重写;
4.从java8开始 接口允许定义静态方法
public static 返回值类型 方法名称(参数列表){ 方法体;}
注意:
应该通过接口名称进行调用,不能通过实现类对象类调用
5.从java9开始 接口允许定义私有方法
普通私有方法:private 返回值类型 方法名称(参数列表){方法体;}
静态私有方法:private static 返回值类型 方法名称(参数列表){方法体;}
注意:
private的方法只有接口自己才能调用,不能被实现类或其它调用
使用接口注意
1.接口是没有静态代码块和构造方法的
2.一个类的直接父类是唯一的,但是一个类可以同时实现多个接口
public class MyInterfaceImpl implements MyInterfaceA,MyInterfaceB{}
继承父类并实现多个接口
MyInterfaceA.java
public interface MyInterfaceA {
public abstract void runa();
}
MyInterfaceB.java
public interface MyInterfaceB {
public abstract void runb();
}
MyInterfaceImpl.java
public class MyInterfaceImplAB implements MyInterfaceA,MyInterfaceB{
@Override
public void runa() {
System.out.println("run a");
}
@Override
public void runb() {
System.out.println("run b");
}
如果 A 和 B 的方法重名 则实现类覆盖重写一次即可
如果没有完全重写所有方法 则类还是抽象类
如果实现类实现多个接口当中存在重复的默认方法 那么实现类一定要对冲突的默认方法重写
一个类如果父类当中的方法和接口当中的默认方法产生冲突 优先使用父类的
类与类之间是单继承的 直接父类只有一个
类与接口之间是多实现的 一个类可以实现多个接口 public class impl Implements methodA,MethodB{}
接口与接口之间是多继承的 public interface method extends methodA,methodB{}
网友评论