接口中可以有实现代码吗?

大家可能会很坚定的说,怎么可能!接口可以声明常量,声明抽象方法,也可以继承父接口,但是不能有具体实现。因为接口是一种契约,是一种框架性协议,这表明它的实现类都是同一种类型,或者说具备相似特征的一个集合体。然而对于一般的程序,接口确实没有任何实现,但是匿名内部类(或者内部类)呢?下面请看代码。

  1. public interface A {

    public void doSomething();

    }

  2. 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中实现了”)。

可以,这样很强大对吧!但是在代码中是严禁出现的,因为这是一种不好的编码习惯,接口是用来干嘛的?接口是一个契约,不仅仅约束着实现着,同时也是一个保证,保证提供的服务(常量、方法)是稳定的,可靠的,如果把实现的代码写到了接口中,那接口就绑定可可能变化的因素,导致实现不再稳定和可靠,是随时可以被更改,被重构的。所以在接口中可以有实现代码,但是应该避免使用。面试的时候是不是可以装一波了嘿嘿。

谢谢大家的观看,喜欢的关注一波~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值