Java 接口和抽象

一、接口的特性

    1.1 接口不是类,不能使用new运算符实例化一个接口;

    1.2 接口中的方法不能包含实例域或静态方法,但却可以包含常量

接口中的方法都会自动地被设置为public,接口中的域将会自动设定为public static final。

Java 语言规范建议不要书写多余的关键字。也就是说,在接口中不要多余地为方法添加public关键字,为域添加 public static final 关键字。

    1.3 每个类只能拥有一个超类,但却可以实现多个接口;

二、接口与抽象类

     2.1 接口和抽象类都能表示通用的属性;

     2.2 但是如果使用抽象类来承载通用的属性,那么每个类都只能拓展于一个类。

有些程序语言中允许一个类有多个超类(即,多重继承)。但Java中不支持多重继承,因为多重继承会让语言本身变得复杂(如C++),效率也会降低。

     2.3 接口可以提供多重继承的大多数好处,同时又能避免多重继承的复杂性和低效性

三、静态方法

      在Java SE8中,允许接口定义静态方法。(没有理由认为这不合理,只是有违于将接口作为抽象规范的初衷)

      在接口中允许定义静态方法之前,通常将静态方法放在伴随类中。在标准库中,可以看到接口和实用工具类成对出现,如Collection/Collections 或 Path/Paths。

       可以定义静态方法之后,就不再需要为实用工具方法提供一个伴随类。

四、默认方法

      可以为接口定义一个默认方法,必须用default修饰符标记。接口中的默认方法可以调用任何其他方法。

     在接口中定义的默认方法,在实现这个接口的时候,可以选择是否实现这个方法。这样的好处是可以让程序员有选择性的去实现。

      默认方法的一个重要用法是“接口演化”。

五、接口默认方法的冲突

      java中解决这种冲突的规则如下:

     1) 超类优先(“类优先”)。如果超类中提供了一个具体方法,同名而且有相同参数类型的默认方法会被忽略。

      2)接口冲突。如果一个超接口提供了一个具体方法,另一个接口提供了一个同名而且参数类型(不论是否是默认参数)相同方法,必须覆盖这个方法来解决冲突。

如  class Student implements Person, Named{ public String getName(){return Person.super.getName();}}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值