0
点赞
收藏
分享

微信扫一扫

Java--接口--JDK8新特性--详解/实例

小龟老师 2022-02-15 阅读 151


简介

        本文介绍Java的接口知识。包括:JDK8新特性(default、static),匿名内部类。

default

简介

        JDK1.8增加default方法。

        接口内部包含了一些默认的方法实现(也就是接口中可以包含方法体,这打破了Java之前版本对接口的语法限制) 。之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改全部实现该接口的类。

        default使得开发者可以在不破坏二进制兼容性的前提下,往现存接口中添加新的方法,即不强制那些实现了该接口的类也同时实现这个新加的方法。

        二进制兼容性:指的就是在升级(也可能是 bug fix)库文件的时候,不必重新编译使用这个库的可执行文件或使用这个库的其他库文件,程序的功能不被破坏。

        实际开发中应该谨慎使用:在复杂的继承体系中,默认方法可能引起歧义和编译错误。

实例 

package com.example;

interface MyInterface{
default void sayHello(){
System.out.println("sayHello");
}
}

class MyInterfaceImpl implements MyInterface{

public void test(){
MyInterface myInterface = new MyInterfaceImpl();
myInterface.sayHello();
}
}

public class Demo {
public static void main(String[] args) {
MyInterfaceImpl impl = new MyInterfaceImpl();
impl.test();
}
}

运行结果

sayHello

 注意:如果两个接口都用default修饰同一方法,则会报错

package com.example;

interface MyInterface1{
default void sayHello(){
System.out.println("sayHello(1)");
}
}

interface MyInterface2{
default void sayHello(){
System.out.println("sayHello(2)");
}
}

class MyInterfaceImpl implements MyInterface1,MyInterface2{
public void test(){
MyInterface1 myInterface = new MyInterfaceImpl();
myInterface.sayHello();
}
}

public class Demo {
public static void main(String[] args) {
MyInterfaceImpl impl = new MyInterfaceImpl();
impl.test();
}
}

Java--接口--JDK8新特性--详解/实例_java

解决办法:在实现类中重写该方法。

package com.example;

interface MyInterface1{
default void sayHello(){
System.out.println("sayHello(1)");
}
}

interface MyInterface2{
default void sayHello(){
System.out.println("sayHello(2)");
}
}

class MyInterfaceImpl implements MyInterface1,MyInterface2{
public void test(){
MyInterface1 myInterface = new MyInterfaceImpl();
myInterface.sayHello();
}

@Override
public void sayHello() {
System.out.println("sayHello(Impl)");
}
}

public class Demo {
public static void main(String[] args) {
MyInterfaceImpl impl = new MyInterfaceImpl();
impl.test();
}
}

运行结果

sayHello(Impl)

static

JDK1.8新增了static函数。static修饰的方法也是非抽象方法,有自己的方法体,在接口中定义一个静态方法,该方法可以直接用< 接口名.方法名() >的形式来调用。相当于调用类的静态方法一样

package com.example;

interface MyInterface{
static void sayHello(){
System.out.println("sayHello");
}
}

public class Demo {
public static void main(String[] args) {
MyInterface.sayHello();
}
}

运行结果

sayHello


举报

相关推荐

0 条评论