JDK1.8新特性之接口

JDK1.8新特性之接口,第1张

JDK1.8新特性之接口

JDK1.8之前:接口类只能定义方法名,返回类型和参数列表,不能有方法体。接口提供了规范,就像肯德基一样,装修风格、产品都一样的,至于招几个员工、怎么经营都是加盟店说了算。

JDK1.8中使用两个新概念扩展了接口的含义:默认方法和静态方法,也就是说接口中可以有方法的具体实现。

(1)、静态方法

使用关键字static来修饰方法,可以直接通过接口名调用。

interface Phone {
    static void makePhone(){
        System.out.println("制造手机");
    }
}
class XiaomiPhone implements Phone {
    @Override
    public void makePhone {
        System.out.println("制造小米手机");
    }
}
(2)、默认方法

使用关键字default来修饰方法,默认方法通过对象实例来调用;默认方法使得开发者可以在不破坏二进制兼容性的前提下,往现存接口中添加新的方法,实现类不用强制性实现接口里的默认方法。

interface Phone {
     default void makePhone(){
        System.out.println("制造手机");
    }
     default void typePhone(){
        System.out.println("手机类型");
    }
}
class XiaomiPhone implements Phone {
    @Override
    public void typePhone{
        System.out.println("小米手机");
    }
}
public class Main {
    public static void main(String[] args) throws InterruptedException {
        XiaomiPhone myphone= new XiaomiPhone ();
        myphone.makePhone();
        myphone.typePhone();//接口中的默认方法已经被覆盖
 
    }
}

(3)、问题

接口的新特性可以实现多继承,但是同时也带来二义性问题。

例如:如果一个类同时实现了两个接口,这两个接口里面的有这相同名字的默认方法。这样的情况下,编译器会报错,因为调用这个方法时编译器不知道该调用哪个接口里面的方法,从而哪个都不选,而是在发现会继承多个默认方法实现并且没有重写时报错,逼使用户显式重写可能冲突的方法。

(4)、总结
  1. 接口中的抽象方法需要实现类来实现
  2. 在JDK1.8之后接口中新增加了静态方法(static)和默认方法(default)。使得接口中可以实现方法(可以写方法体)。
  3. 接口中的默认方法由实现对象来调用。
  4. 接口中的静态方法由接口.静态方法名的形式来调用。
  5. 接口不允许实例化对象,但是可以通过匿名实现类来实现。
  6. 接口实现了多继承,但是要注意避免二义性。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5608149.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存