Java8之后的接口和抽象类

Java1.8新特性 接口增强

       1.在接口中可以添加使用default关键字修饰的非抽象方法.

       2.接口中可以声明静态方法,并且可以实现

 

1.默认方法:

       允许接口中有使用default修饰的非抽象方法的实现-虚拟扩展方法,默认方法或防护方法;实现接口的时候,默认子类可以直接使用,类似于抽象类中的非抽象方法;(接口和抽象类的差别在减小);默认方法不能够重写Object的方法,但是可以重载Object的方法;默认方法不会强迫子类实现;

       现在在接口中可以添加默认方法,而不会影响编译;如果新增方法,是需要子类实现的,但是默认方法不会要求子类实现,且子类可以直接使用或者复写;

       在java1.8之后,Collection这一类的接口,新增了好多方法就是例子;

       默认方法的优缺点:

              优点:让接口的扩展性更强,对实现类的代码影响更小

              缺点:接口和类的界定越来越模糊.越来越类似于抽象类,多重继承之后如果不再重新界定方法的功能,可能会出现变异!

              例:

                     接口A定义了默认打印方法:print a;

                     接口B继承了接口A,重写了打印方法:print b;

                     类C实现了接口B,在使用默认方法的时候回选择B的实现而不是A的

2.静态方法:

       接口中可以直接定义静态方法并使用;

 

3.java8中抽象类和接口

相同点:

 

1)都是抽象类型;

 

2)都可以有实现方法(以前接口不行);

 

3)都可以不需要实现类或者继承者去实现所有方法,(以前不行,现在接口中默认方法不需要实现者实现)

 

不同点:

 

1)抽象类不可以多重继承,接口可以(无论是多重类型继承还是多重行为继承);

 

2)抽象类和接口所反映出的设计理念不同。其实抽象类表示的是"is-a"关系,接口表示的是"like-a"关系;

 

3)接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值;抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

      

friendly 型:如果一个类、类属变量及方法不以public,protected,private这三种修饰符来修饰,它就是friendly类型的,那么包内的任何类都可以访问它,而包外的任何类都不能访问它(包括包外继承了此类的子类),因此,这种类、类属变量及方法对包内的其他类是友好的,开放的,而对包外的其他类是关闭的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值