JAVA8 默认方法与抽象类的比较

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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值