接口(interface、implement)

接口:interface
接口的类中
所有的属性默认为:public static final

所有的方法默认为:public abstract

在jdk1.8之前只能定义静态的常量和公共的抽象方法,在jdk1.8之后就可以定义静态方法和默认方法
(常量一般都建议使用大写字母)

意义

接口存在的意义:Java中一个类只能有一个父类,所以用接口可以实现多继承的逻辑

从本质上来讲,接口是一种特殊的抽象类,这种“抽象类”中只包含了常量和方法的定义,而没有变量和方法的实现

定义

接口的定义:使用interface关键字来声明一个接口。

【访问权限修饰符】 interface 接口名称 【extends 其他接口名1,… 其他接口名n】{
// 声明常量
// 抽象方法
// 静态方法
// 默认方法
}
接口的使用:
类使用implements关键字来实现接口。在类的声明中,implements关键字是跟在class声明之后的
【访问权限修饰符】 class 类名 implements 接口名1,… , 接口名n { }

public class MyInterfaceImpl implements MyInterface1,MyIntereFace2 {}

接口与继承的结合
【访问权限修饰符】class 类名 extends 父类名 implements 接口名1,… , 接口名n { }

public class MyInterfaceImpl extends fulei implements MyInterface1,MyIntereFace2 {}

特性

● 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
● 接口中方法可以是抽象的,静态的,默认的。
● 接口中声明的属性默认为 public static final 的。
● 接口不是被类继承的,是被类用来实现的。
● 接口不能实例化(就是没有构造方法,也是和抽象类的区别),但是可以声明对象的引用(多态性)。
● 多个类是可以实现一个共同的接口。
● 一个类是可以实现多个接口的,但是只能继承一个类。
● 与继承关系类似,接口与实现类之间存在多态性。
● 一个接口是可以继承其他多个接口的。
● 当一个类实现接口时,类是要求实现接口中的所有方法(包括要实现的接口所继承的所有接口),否则,类就必须声明为抽象的类。

一个类可以实现多个接口,但是一个类只能继承一个类
小知识:一个类如果是一个接口的实现类,那么我们习惯命名是在接口名后面加上impl

package com.functorone;

public class Demo {
    public static void main(String[] args) {
        //是可以被调用到的
        System.out.println(MyInterface.NUM);  //常量一般都建议使用大写字母

        MyInterface.test1();            //直接调用到静态方法
        MyInterfaceImpl myInterface = new MyInterfaceImpl();
        myInterface.eat();
    }
}




package com.functorone;

public interface MyInterface {
    //默认之下它的完整语句是 public static final int a = 10;
    int NUM = 10;

    //默认之下它的完整语句是 public abstract void eat();
    void eat();     //定义方法(定义功能)

    //默认方法只能通过子类来调用,子类可以重写也可以不重写
    default void test() {         //完整语句是: public default void test()
        System.out.println("默认方法");
    }

    //静态方法是可以直接通过接口名调用到
    static void test1() {
        System.out.println("静态方法");
    }
}




package com.functorone;

/*
 * 要么将这个类声明为抽象类
 * 要么实现接口里面所有的抽象类
 * */
public class MyInterfaceImpl implements MyInterface {
    @Override
    public void eat() {
        System.out.println("MyInterface里面的eat抽象方法的实现");
    }
}

implementation是下载这个库吗 implementatiin_java