//接口
public interface MyInterface {
// 不能有构造方法,这是接口,不是类
// 抽象方法
public abstract void methodAbstract();
public default void methodDefault(){
System.out.println("接口中的默认方法");
methodStatic();
methodAbstract();
}
public static void methodStatic(){
System.out.println("接口中的静态方法");
}
// 报错 不能有少了 abstract default static 修饰的方法
// public void fun(){
// System.out.println();
// }
}
// 实现类1
public class MyInterfaceImpl implements MyInterface {
public MyInterfaceImpl() {
}
@Override
public void methodAbstract(){
System.out.println("实现类实现了接口中的抽象方法");
}
@Override
public void methodDefault(){
System.out.println("实现类覆盖重写了接口默认方法");
}
public void methodImpl(){
System.out.println("实现类中的成员方法");
// super.methodDefault(); 报错
methodDefault(); //本类中的methodDefault方法
}
}
//实现类2
public class MyInterfaceImplTest implements MyInterface{
@Override
public void methodAbstract(){
System.out.println("test实现类实现了抽象方法");
}
public void methodImpl(){
System.out.println("test类中的成员方法");
methodDefault();
}
}
//主类
/**
* Created by tianxin on 2020/2/22.
* 接口总结:
(接口没有构造方法,抽象类有构造方法,
接口中不能有自己的成员方法(只能有static abstract default方法)抽象类可以有自己的成员方法,
接口中的实现类没有super字段 抽象类的继承类中可以有
注:【因为一个类可以实现多个接口,super会出现歧义】 【继承关系一对一 只有一个父类】)
* 1. 成员变量其实是常量(不可改变的量)
* 格式: [public] [static] [final] 数据类型 常量名称 = 数据值
* 注意: 常量名称完全大写 用下划线隔开
* 常量一旦赋值,不能改变
*
* 2. 接口最重要的是抽象方法
* 格式: [public] [abstract] 返回值类型 方法名称(参数列表);
* 注意: 实现类中必须覆盖重写接口所有的抽象方法,除非实现类是抽象类
*
* 3. 接口中可以有默认方法
* 格式:[public] default 返回值类型 方法名称(参数列表){方法体}
* 注意: 实现类中可以对默认方法进行覆盖重写
*
* 4. 接口中可以定义静态方法
* 格式: [public] static 返回值类型 方法名称(参数列表){方法体}
* 注意: 只能通过接口名称调用
*
* 5. 从java 9 开始 允许私有方法 只能被接口自己调用 不能被实现类调用
*/
public class DemoInterface {
public static void main(String[] args) {
MyInterfaceImpl myInterface = new MyInterfaceImpl();
myInterface.methodAbstract();
myInterface.methodImpl();
System.out.println("===========================");
MyInterfaceImplTest myInterfaceImplTest = new MyInterfaceImplTest();
myInterfaceImplTest.methodAbstract();
myInterfaceImplTest.methodImpl();
}
}