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,而抽象类则可以是任何形式的变量;
简而言之,抽象类更接近普通类,只是可以有抽象方法;接口类比抽象类更加抽象。
网友评论