java 接口

接口的定义

  • java的设计语言中,接口不是类,而是对类一组需求的描述,这些类要遵从接口描述的统一格式进行定义
  • 一个类可以实现一个或者多个接口,并在需要接口的地方,随时使用实现了相应接口的对象。
  • 接口中的所有方法自动属于public

接口的特性

  • 与可以建立类的继承关系一样,接口也可被扩展,允许存在多条从具有较高通用性的接口到较高专用性的接口的链,即:接口之间也可以存在继承关系
  • 接口中不能包含实例域或者静态方法,但可以包含常量。常量自动设置为静态的
  public interface MoveParent{
       void move(double x);
   }
    
   public interface MoveChild extends MoveParent{
       double a = 1;
       void moveChild(double a);
   }

   public class achieve implements MoveChild{
       @Override
       public void move(double x) {
       }

       @Override
       public void moveChild(double a) {
       }
  • 前面提到接口中不允许接入静态方法,但是在JSE8中,增加了允许接口中存在静态方法,即一般类中实现的静态方法,在接口中现在可以加入,但是不建议这么做,目前为止通常的做法,都是将静态方法放在伴随类中的。

默认方法

  • 可以在接口中以default修饰符,修饰方法提供默认实现。
    ps:一般情况下是使用不到这个默认实现的,除非接口中定义的接口,实现类中没必要进行实现,那么可以使用default修饰方法,在实现类中选择性的实现或者重写默认实现的方法。.
  public interface MoveChild extends MoveParent{
       double a = 1;
       void moveChild(double a);

       default void getname(){
           System.out.println("这是一个接口中默认实现的方法,实现类可以选择性的实现
           ,编译器不会报错");
       }
   }

接口实现中出现的重复方法问题

  • 接口的默认方法冲突。
    一个实现类同时实现两个接口,而两个接口的都提供了同一个方法,其中一个,或者两个都进行了默认实现。这时,编译器就会报错,需要程序员解决这个二义性。

    • 这个时候需要在实现类中定义一个相同的方法,return [接口名].super.[方法名],直接指定实现哪个接口中这个方法。
      
  • 类优先原则
    接口实现类中,这个类可能还继承了一个超类,并且这个超类中定义了与接口中一样的方法,这种情况下只会考虑超类方法,接口中定义的所有默认方法都会被忽略,这就是类优先原则。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值