接口的定义和特征

接口中的权限修饰符可以省略,接口会自动帮你补全
package com.key.d12_packeg.interfacedemo;/*定义接口*/public interface SportMan_interface {//接口中的成员:JDK1.8之前只有常量和抽象方法/*接口中定义常量时,可以不写public static final,接口会自动给加上*/public static final String SCHOOLNAME = "实验学校";String SCHOOLNAME1 = "实验学校1";/*定义抽象方法:和定义常量一样,在接口中定义抽象方法时,也可以省略public abstract,接口会默认加上*/public abstract void run();void eat();}
接口的基本使用:被实现

实现类是一种特殊的子类,实现类可以继承一个接口也可以继承多个接口
举个例子:
一共有四个文件:接口Law,接口SportMan_interface,类PingPangMan,类test
package com.key.d12_packeg.interfacedemo;public interface Law {void rule();}
package com.key.d12_packeg.interfacedemo;/*定义接口*/public interface SportMan_interface {//接口中的成员:JDK1.8之前只有常量和抽象方法/*接口中定义常量时,可以不写public static final,接口会自动给加上*/public static final String SCHOOLNAME = "实验学校";String SCHOOLNAME1 = "实验学校1";/*定义抽象方法:和定义常量一样,在接口中定义抽象方法时,也可以省略public abstract,接口会默认加上*/public abstract void run();void eat();void competition();}
package com.key.d12_packeg.interfacedemo;public class PingPangMan implements SportMan_interface,Law{private String name;public PingPangMan(String name) {this.name = name;}/*因为接口内的方法是抽象方法,所以这里必须要重写方法*/@Overridepublic void rule() {System.out.println(name + "要遵章守法");}@Overridepublic void run() {System.out.println(name + "要跑步");}@Overridepublic void eat() {System.out.println(name + "要吃饭");}@Overridepublic void competition() {System.out.println(name + "要吃饭");}}
package com.key.d12_packeg.interfacedemo;public class test {public static void main(String[] args) {PingPangMan ppm = new PingPangMan("张三");ppm.competition();ppm.eat();ppm.rule();ppm.run();}}

接口实现的注意事项

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

比如:现在有三个接口,People,SportMan_interface,Law,用People接口继承其他两个接口,这样子在实现类中只需要implements一个People接口
package com.key.d12_packeg.interface_duojicheng;public interface People extends Law,SportMan_interface{void eat();}
package com.key.d12_packeg.interface_duojicheng;public class FootballMan implements People{@Overridepublic void eat() {}@Overridepublic void rule() {}@Overridepublic void run() {}@Overridepublic void competition() {}}
JDK8以后的接口
允许接口直接定义带有方法体的方法


举个例子:接口,实现类,测试类
package com.key.d12_packeg.interfacedemo_jdk8;public interface SportManInter {/**jkd8以后新增接口:1、默认方法(其实就是实例方法):--必须用default修饰,默认用public修饰--默认方法需要用实现类调用*///public default void eat(){}default void run(){System.out.println("跑的很快 ");}/*** 2、静态方法:* --必须用static修饰* --用本身的接口名去调用*/static void eat(){System.out.println("吃很多");}/*** 3、私有方法(实例方法):* --必须用private修饰* --只能在本接口中调用* --可以在本接口中通过默认方法去调用私有方法*/private void go(){System.out.println("开始跑");}public default void start_go(){go();}}
package com.key.d12_packeg.interfacedemo_jdk8;public class PingPangMan implements SportManInter {}
package com.key.d12_packeg.interfacedemo_jdk8;public class interfacetest {public static void main(String[] args) {PingPangMan ping = new PingPangMan();//1、默认方法调用ping.run();//2、静态方法调用SportManInter.eat();//3、私有方法调用ping.start_go();}}

