package org.java;
/**
* @author: krauser
* @date: Create in 上午11:28 2018/1/9
* @Description: java 8抽象类与接口对比
* <p>
* 相同点
* 1.都是抽象类型;
* 2.都可以有实现方法(以前接口不行);
* 3.都可以不需要实现类或者继承者去实现所有方法,(以前不行,现在接口中默认方法不需要实现者实现)
* 不同点
* 1.抽象类不可以多重继承,接口可以(无论是多重类型继承还是多重行为继承);
* 2.抽象类和接口所反映出的设计理念不同。其实抽象类表示的是"is-a"关系,接口表示的是"like-a"关系;
* 3.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能改变其值;抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。
*/
public interface DeafultMethodDemo {
String msg = "TEST";
default void sayHello() {
System.out.println(msg);
}
public static void main(String[] args) {
DeafultMethodTest test = new DeafultMethodTest();
test.sayHello();
}
}
interface DeafultMethodDemo1 extends DeafultMethodDemo {
@Override
default void sayHello() {
// msg = "TEST2"; ERROR
System.out.println(msg);
}
}
class DeafultMethodTest implements DeafultMethodDemo, DeafultMethodDemo1 {
// @Override
// public void sayHello() {
//
// }
}
为什么要有这个特性?首先,之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改全部实现该接口的类。引进的默认方法。他们的目的是为了解决接口的修改与现有的实现不兼容的问题。
参考: https://my.oschina.net/benhaile/blog/176007