程序员社区

Java8新特性-----接口中的默认方法和静态方法

接口中的默认方法和静态方法

  • 接口中的默认方法
  • 类优先原则
  • 接口中的静态方法

接口中的默认方法

在JDK 8之前,一个接口不能包含任何实现。接口只包含常量和方法签名。
从JDK 8开始,可以定义接口中方法的默认实现。这些方法称为默认方法。

使用关键字"default"声明一个默认方法,它包含一个方法体。
所有实现类接口的默认方法都可用。如果实现类想要使用它,它可以使用它,或者它可以忽略默认实现并创建自己的实现。
即使接口现在可以定义默认方法,如果要创建实例,接口仍然必须由类实现。

请注意,实现类只需要实现抽象方法。默认方法可以按原样使用,除非实现类要更改行为。

接口的中的默认方法:

public interface MyIntertrce 
{
    default  void show()
    {
        System.out.println("接口");
    }
}

一个类中实现了与接口中完全相同的默认方法:

public class MyClass
{
    public void show()
    {
        System.out.println("类");
    }
}

mytest继承了接口和类:

public class mytest extends MyClass  implements MyIntertrce{
}

测试:

public class TestMain
{
    @Test
    void test()
    {
       mytest m=new mytest();
       m.show();
    }
}

在这里插入图片描述


类优先原则

在这里插入图片描述


接口中的静态方法

public interface MyIntertrce
{
       static void dhy()
       {
           System.out.println("静态方法调用");
       }
}

测试:

public class TestMain
{
    @Test
    void test()
    {
       MyIntertrce.dhy();
    }
}

在这里插入图片描述
因为一个类是可以实现多个接口的,如果接口中的静态方法的方法前面相同,就会发生继承冲突。所以索性就从继承这个层面阻断冲突的发生。反过来看由于接口中的字段是可以被继承的,所以实际上接口中的字段是存在继承冲突的。

interface TestInterface1 {
    String hello="TestInterface1";
    
}
interface TestInterface1 {
    String hello="TestInterface2";
}
public class Test implements TestInterface1,TestInterface2{
    public static void main(String[] args) {
        System.out.println(Test.hello);//这里会报错
    }
}

Java8中接口中静态字段可以被继承(默认用public static final修饰),静态方法不会继承,只能通过接口名调用


interface TestInterface1 {
    static void sayHello(){
        System.out.println("TestInterface1 Hello");
    }
}
public class Test implements TestInterface1{
    public static void main(String[] args) {
        TestInterface1.sayHello();
        Test.sayHello();//编译报错
    }

Java8新特性——接口静态方法

赞(0) 打赏
未经允许不得转载:IDEA激活码 » Java8新特性-----接口中的默认方法和静态方法

相关推荐

  • 暂无文章

一个分享Java & Python知识的社区