大家可能会很坚定的说,怎么可能!接口可以声明常量,声明抽象方法,也可以继承父接口,但是不能有具体实现。因为接口是一种契约,是一种框架性协议,这表明它的实现类都是同一种类型,或者说具备相似特征的一个集合体。然而对于一般的程序,接口确实没有任何实现,但是匿名内部类(或者内部类)呢?下面请看代码。
public interface A {
public void doSomething();
}
public interface B {
public static final A a=new A(){
public void doSomething(){
System.out.println("我再接口B中实现了");
}
};
}
下面看一下测试类的内容
public class Test {
public static void main(String[] args) {
//调用接口的实现
B.a.doSomething();
}
}
可以看到在接口A中声明了一个方法,在B接口中声明了一个静态变量a,他的值是一个匿名内部类的实例对象,就是该内部类实现了A的接口,这样就在B接口中存在着实现代码。而我们测试类的main方法中,调用了B接口的常量,在没有任何显示实现类的情况下,可以打印出B中实现的代码(打印出了“我再接口B中实现了”)。
可以,这样很强大对吧!但是在代码中是严禁出现的,因为这是一种不好的编码习惯,接口是用来干嘛的?接口是一个契约,不仅仅约束着实现着,同时也是一个保证,保证提供的服务(常量、方法)是稳定的,可靠的,如果把实现的代码写到了接口中,那接口就绑定可可能变化的因素,导致实现不再稳定和可靠,是随时可以被更改,被重构的。所以在接口中可以有实现代码,但是应该避免使用。面试的时候是不是可以装一波了嘿嘿。
谢谢大家的观看,喜欢的关注一波~~~