Java基础复习 Day 13
1. 接口
-
接口就是不同类之间要符合一个公共规范,只要符合标准,谁都可以使用
接口是一种引用类型,最重要的就是其中的抽象方法。
-
interface接口定义格式
public interface 接口名称{
//接口内容
}
备注:即使定义为interface编译成字节码文件时,仍旧是会被编译成.class文件。
-
接口内容:
-
JAVA8
1.常量
成员变量,其实是常量,格式:
[][] [public] [static] [final] 数据类型 常量名 = 数据值
注意:常量必须要赋值,并且一旦赋值不能改变
常量名称完全大写,用下划线进行分割
2.抽象方法
3.默认方法
4.静态方法
//定义一个接口 /* * 抽象方法定义格式: * public abstract 返回值 方法名称(参数列表); * 注意事项: *1.接口当中的抽象方法,修饰符必须是两个固定的关键字:public abstract *2.这两个关键字可以选择性省略 * * 接口的使用步骤: * 1.接口不能直接调用,必须有一个实现类去实现该接口。 * 关键字:implements * 2,实现类必须覆写所实现interface中的所有抽象方法 * 3.创建实体类对象,进行使用 * * 注意事项: * 如果实现类没有覆盖重写接口所有的抽象方法,那么这个类必须是抽象类 * * */ public interface DemoInterface01 { public abstract void methodAbstract(); void methodAbstract2(); } //定义一个实现类覆写接口抽象方法 public class DemoInterImpl implements DemoInterface01{ @Override public void methodAbstract() { System.out.println("第一个抽象方法被覆写"); } @Override public void methodAbstract2() { System.out.println("第二个抽象方法被覆写"); } } //接口在main函数中的使用 public static void main(String[] args) { DemoInterImpl demoInter = new DemoInterImpl(); demoInter.methodAbstract();//第一个抽象方法被覆写 demoInter.methodAbstract2();//第二个抽象方法被覆写 }
-
-
接口内容从java8 开始可以定义default方法
default方法格式:
public default method(参数类型){
//方法体
}
-
备注:default方法是为了解决接口升级的问题(当接口,实现类都投入使用时,如果再在接口添加新抽象方法,则所有的实现类都需要改,这时候就会有一个解决案让修改最小化,就是定义一个default方法
-
注意事项:
-
接口的默认方法可以通过实现类直接调用
-
接口的默认方法也尅被实现类覆盖重写
//定义一个接口,并定义默认方法 public interface DemoInterface01 { public abstract void methodAbstract(); void methodAbstract2(); //新添加的默认方法:public可以省略 public default void methodDefault(){ System.out.println("这是一个默认方法"); } } //实现类1,没有覆写默认方法 public class DemoInterImpl implements DemoInterface01{ @Override public void methodAbstract() { System.out.println("第一个抽象方法被覆写"); } @Override public void methodAbstract2() { System.out.println("第二个抽象方法被覆写"); } } //实现类2,覆写默认方法 public class Demo2InterImpl implements DemoInterface01{ @Override public void methodAbstract() { System.out.println(""); } @Override public void methodAbstract2() { System.out.println(""); } @Override public void methodDefault() { System.out.println("default方法被实现类重写了"); } } //Main方法通过实现类调用默认方法来实现接口 public class DemoMain { public static void main(String[] args) { DemoInterImpl demoInter = new DemoInterImpl(); demoInter.methodAbstract();//第一个抽象方法被覆写 demoInter.methodAbstract2();//第二个抽象方法被覆写 //实现类可以直接调用default方法 demoInter.methodDefault();//这是一个默认方法 Demo2InterImpl demo2Inter = new Demo2InterImpl(); demo2Inter.methodDefault();//default方法被实现类重写了 } }
-
-
-
接口中定义静态方法(Java8)
格式:
public static method(参数类型){
//方法体
}
使用:通过接口名直接调用静态方法
//接口中定义静态方法 public interface DemoInterface01 { public static void methodStatic(){ System.out.println("这是一个接口中的静态方法"); } } //实现类中不能实现该方法并且在main方法中也不能通过实现类对象调用 //Main方法中,直接通过接口来调用 public static void main(String[] args) { DemoInterface01.methodStatic();//这是一个接口中的静态方法 }
-
在Java9+的版本中,接口的内容除了Java8允许定义的内容还可以有:
-
普通私有方法
private 返回值类型 方法名称(参数列表){方法体}
-
静态私有方法
private static 返回值类型 方法名称(参数列表){方法体}
注意:private的方法只有接口自己才可以调用,不能被实现类或者别人使用
-
-
接口的注意事项:
- 接口没有静态方法块和构造方法
- 一个类的直接父类有且仅有一个,但一个类可以实现多个接口 用逗号隔开
- 如果实现类要实现的接口里多个接口的抽象方法一样,则只需重写一次即可。
- 如果实现类没有实现所有接口的抽象方法,就得定义为抽象类。
- 如果实现类要实现的接口里多个接口的的默认方法一样,则必须要重写默认方法。
- 一个类,如果直接父类的方法和接口中的方法名有冲突,则优先使用父类方法。
-
接口之间的多继承
- 类与类之间是单继承的,一个类只能有一个直接父类
- 类与接口之间是多实现的,一个类能实现多个接口
- 接口与接口之间是多继承的
//父接口1 public interface MyInterface1 { public abstract void method1(); public abstract void method1Common(); } //父接口2 public interface MyInterface2 { public abstract void method2(); public abstract void method1Common(); } //子接口 public interface MyInterface extends MyInterface1,MyInterface2{ public abstract void method3(); } //子接口的实现类,定义的四个方法都需要重写 public class MyInterfaceImp implements MyInterface{ @Override public void method3() { } @Override public void method1() { } @Override public void method2() { } @Override public void method1Common() { } }