接口的定义和特征

image.png
接口中的权限修饰符可以省略,接口会自动帮你补全

  1. package com.key.d12_packeg.interfacedemo;
  2. /*
  3. 定义接口
  4. */
  5. public interface SportMan_interface {
  6. //接口中的成员:JDK1.8之前只有常量和抽象方法
  7. /*
  8. 接口中定义常量时,可以不写public static final,接口会自动给加上
  9. */
  10. public static final String SCHOOLNAME = "实验学校";
  11. String SCHOOLNAME1 = "实验学校1";
  12. /*
  13. 定义抽象方法:
  14. 和定义常量一样,在接口中定义抽象方法时,也可以省略public abstract,接口会默认加上
  15. */
  16. public abstract void run();
  17. void eat();
  18. }

接口的基本使用:被实现

image.png
实现类是一种特殊的子类,实现类可以继承一个接口也可以继承多个接口

举个例子:
一共有四个文件:接口Law,接口SportMan_interface,类PingPangMan,类test

  1. package com.key.d12_packeg.interfacedemo;
  2. public interface Law {
  3. void rule();
  4. }
  1. package com.key.d12_packeg.interfacedemo;
  2. /*
  3. 定义接口
  4. */
  5. public interface SportMan_interface {
  6. //接口中的成员:JDK1.8之前只有常量和抽象方法
  7. /*
  8. 接口中定义常量时,可以不写public static final,接口会自动给加上
  9. */
  10. public static final String SCHOOLNAME = "实验学校";
  11. String SCHOOLNAME1 = "实验学校1";
  12. /*
  13. 定义抽象方法:
  14. 和定义常量一样,在接口中定义抽象方法时,也可以省略public abstract,接口会默认加上
  15. */
  16. public abstract void run();
  17. void eat();
  18. void competition();
  19. }
  1. package com.key.d12_packeg.interfacedemo;
  2. public class PingPangMan implements SportMan_interface,Law{
  3. private String name;
  4. public PingPangMan(String name) {
  5. this.name = name;
  6. }
  7. /*
  8. 因为接口内的方法是抽象方法,所以这里必须要重写方法
  9. */
  10. @Override
  11. public void rule() {
  12. System.out.println(name + "要遵章守法");
  13. }
  14. @Override
  15. public void run() {
  16. System.out.println(name + "要跑步");
  17. }
  18. @Override
  19. public void eat() {
  20. System.out.println(name + "要吃饭");
  21. }
  22. @Override
  23. public void competition() {
  24. System.out.println(name + "要吃饭");
  25. }
  26. }
  1. package com.key.d12_packeg.interfacedemo;
  2. public class test {
  3. public static void main(String[] args) {
  4. PingPangMan ppm = new PingPangMan("张三");
  5. ppm.competition();
  6. ppm.eat();
  7. ppm.rule();
  8. ppm.run();
  9. }
  10. }

image.png

接口实现的注意事项

image.png

接口与接口的关系:多继承

image.png
比如:现在有三个接口,People,SportMan_interface,Law,用People接口继承其他两个接口,这样子在实现类中只需要implements一个People接口

  1. package com.key.d12_packeg.interface_duojicheng;
  2. public interface People extends Law,SportMan_interface{
  3. void eat();
  4. }
  1. package com.key.d12_packeg.interface_duojicheng;
  2. public class FootballMan implements People{
  3. @Override
  4. public void eat() {
  5. }
  6. @Override
  7. public void rule() {
  8. }
  9. @Override
  10. public void run() {
  11. }
  12. @Override
  13. public void competition() {
  14. }
  15. }

JDK8以后的接口

允许接口直接定义带有方法体的方法
image.png
image.png
image.png

举个例子:接口,实现类,测试类

  1. package com.key.d12_packeg.interfacedemo_jdk8;
  2. public interface SportManInter {
  3. /**
  4. jkd8以后新增接口:
  5. 1、默认方法(其实就是实例方法):
  6. --必须用default修饰,默认用public修饰
  7. --默认方法需要用实现类调用
  8. */
  9. //public default void eat(){}
  10. default void run(){
  11. System.out.println("跑的很快 ");
  12. }
  13. /**
  14. * 2、静态方法:
  15. * --必须用static修饰
  16. * --用本身的接口名去调用
  17. */
  18. static void eat(){
  19. System.out.println("吃很多");
  20. }
  21. /**
  22. * 3、私有方法(实例方法):
  23. * --必须用private修饰
  24. * --只能在本接口中调用
  25. * --可以在本接口中通过默认方法去调用私有方法
  26. */
  27. private void go(){
  28. System.out.println("开始跑");
  29. }
  30. public default void start_go(){
  31. go();
  32. }
  33. }
  1. package com.key.d12_packeg.interfacedemo_jdk8;
  2. public class PingPangMan implements SportManInter {
  3. }
  1. package com.key.d12_packeg.interfacedemo_jdk8;
  2. public class interfacetest {
  3. public static void main(String[] args) {
  4. PingPangMan ping = new PingPangMan();
  5. //1、默认方法调用
  6. ping.run();
  7. //2、静态方法调用
  8. SportManInter.eat();
  9. //3、私有方法调用
  10. ping.start_go();
  11. }
  12. }

image.png