美文网首页
java8(新特性1)---接口(附:接口和抽象类的区别)

java8(新特性1)---接口(附:接口和抽象类的区别)

作者: Andy__Dufresne | 来源:发表于2020-03-22 12:21 被阅读0次

Hope is a good thing, maybe the best of things, and no good thing ever dies.

2014年发布的java8,有诸多新特性。

1、接口

变化---文字描述

java8以前,接口中变量必须是public static final,方法必须是public abstract,不能有实现体;
java8以后,接口中变量没有变化,必须是public static final,方法发生变化,除了public abstract以外,新增两种可以有实现体的方法:default method和public static method

变化---代码描述

接口

 //变量:public static final
 //方法:public abstract,default,public static
public interface Inter {

    public static final int a =1; 

    public abstract void func(); //必须是public abstract(private,protected不行)

    default void func1() {//必须是default,其他三种(private,protected,public)不行

        System.out.println("1");

    }

public static void func2() {//必须是public,其他不行

        System.out.println("2");

    }

接口实现类

//子类实现接口类,其覆盖方法必须是public
public class Cla implements Inter {
    @Override
    public void func() {  //必须是public
        System.out.println("0");
    }
    @Override   //必须是public
    public void func1() {
    }
    @Override  //error:静态方法不能覆盖
    public static void func2() {
    }
}

简而言之,接口中的方法和变量都是public的,这也是它与抽象类的一种区别

2、抽象类

abstract class Abs {
    protected abstract void func();
    public abstract void func1();
    abstract void func2();
    protected static void func3() {
    }
    private void func4(){}
}

3、接口和抽象类的区别

java8之后,接口和抽象类的差别已经很小了,方法上双方都可以有实现体,也可以没有;区别的地方主要是,抽象类中抽象方法可以自定义修饰符public,protected(private),实现体方法可以自定义private,protected,public;变量上,接口依然必须是public static final,而抽象类则可以是任何形式的变量;

简而言之,抽象类更接近普通类,只是可以有抽象方法;接口类比抽象类更加抽象。

相关文章

网友评论

      本文标题:java8(新特性1)---接口(附:接口和抽象类的区别)

      本文链接:https://www.haomeiwen.com/subject/yuimyhtx.html