public interface InterfaceTest { int a = 0; public static final int b = 0;//public static final可以省略不写 void sum1(); public abstract void sum2();// public abstract可以省略不写 static void test1() { System.out.println("static可以实现在接口中定义方法内容,此方法不推荐具体用法可自行学习,这也是Java8的新特性"); } default void test2() { System.out.println("default可以实现在接口中定义方法内容,并且此方法没必要去类中实现"); } } class Test1 implements InterfaceTest{ @Override public void sum1() { System.out.println("此方法必须在类中去实现"); } @Override public void sum2() { System.out.println("此方法必须在类中去实现"); } }
接口的属性:
接口不是类,所以不可以使用new运算符实例化一个接口。x = new Comparable();❌
但是我们可以使用接口去声明一个变量 Comparable x;✔
我们可以使用接口变量去引用实现了这个接口的类
public static void main(String[] args) { InterfaceTest inter = new Test1();//跟多态差不多 if(inter instanceof InterfaceTest) {//同样可以使用instanceof判断,这个肯定为true了 inter.sum1(); inter.sum2(); inter.test2(); } }
实现多接口的写法:public class Employee extends Person implements Comparable,Collection,...
class Father { public void sum1() { System.out.println("我是父亲的sum1"); } public void test2() { System.out.println("我是父亲的test2"); } } class Son extends Father implements InterfaceTest{ @Override public void sum1() {//在我们重写方法是不可以省略public System.out.println("此方法必须在类中去实现,我是儿子sum1"); } @Override public void sum2() { System.out.println("此方法必须在类中去实现"); } public static void main(String[] args) { InterfaceTest inter = new Son(); if(inter instanceof InterfaceTest) { inter.sum1();//经过测试发现,和多态性一样,优先调用子类 inter.sum2(); inter.test2();//经过测试发现,这个default的情况是,父类优先 } } }
最终就是记住“类优先”原则。
如果说父类实现了某个接口,那么子类继承父类时候,自然实现了该接口,没用必要再实现了。
在我刚接触这个"接口回调"一次时,我觉得非常的高大上。
其实就是简单的多态应用
假设Com是一个接口,ImpleCom()是该接口的实现类,则Com c = new ImpleCom();
在调用方法是仍然和多态一样。可以把实现某一接口的类创建的对象的引用赋值给该接口声明的接口变量---->Com c = new ImpleCom();,那么该接口变量 c 就可以调用被类实现的接口方法以及接口提供的default方法或者类重写的default方法。 其实真没啥可说的,就是这个 c 既可以调用从接口那里实现过来的方法,也可以调用自身的方法。