简述Java接口

本人小白一枚,欢迎大家一起讨论学习,如有错误,还望大家指教。

接口
接口,是Java语言中的一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法(JDK 9)。
接口的定义,它与定义类方法相似,但是使用interface关键字。它也会编译成.class文件,但一定要明确它并不是类,而是另外一种引用数据类型。(引用数据类型:数组、类、接口)
接口中的成员都有固定的修饰符。
常量:public static final
方法:public abstract
Java 7及之前:
1、常量
2、抽象方法

Java 8,可以额外包含
3、默认方法
4、静态方法

Java 9,可以额外包含
5、私有方法
接口是不可以创建对象的,因为有抽象方法,需要被实现的类重写,实现的类对接口中所有的抽象方法全部重写后,该类才可以实例化,否则该类是一个抽象类。

 public interface 接口名称  {    
         // 抽象方法
         // 默认方法   
         // 静态方法   
         // 私有方法 
   }

含有抽象方法
抽象方法:使用abstract关键字修饰,可以省略,没有方法体。该方法供子类实现使用。

interface Demo {
    public abstract void method();
}

含有默认方法和静态方法
默认方法:使用default修饰,不可省略,供子类调用或者子类重写,必须有方法体。
静态方法:使用static修饰,不可省略,供接口直接调用,必须有方法体。

interface Demo {
    public default void defaultMethod() {
        System.out.println("接口Demo中的默认方法");
    }
    
    public static void staticMethod() {
        System.out.println("接口Demo中的静态方法");
    }
}

含有私有方法和私有静态方法
私有方法:使用private修饰,供接口中的默认方法或者静态方法调用,必须有方法体。

实现
类与接口的关系为实现关系,即类实现接口,该类可以称为接口的实现类,也可以称为接口的子类。实现的动作类似于继承,使用implements关键字。
实现格式

class 类名 implements 接口名  {     
     // 重写接口中抽象方法【必须】
     // 重写接口中默认方法【可选】    
  }

默认方法的使用(以下方式二选一,但只能通过实现类的对象来调用)
1、可以继承
2、可以重写

interface A  {    
    public default void methodA(){}     
    public default void method(){}
    }  
    
interface B { 
    public default void methodB(){} 
    public default void method(){}
    }
    
public class C implements A,B {     
   @Override 
   public void method() {   
         System.out.println("method"); 
       } 
  }

静态方法的使用
静态与.class文件相关,只能接口名调用,不可以通过实现类的类名或者实现类的对象调用。

public class InterfaceDemo {
    public static void main(String[] args) {
        Cart cart = new Cart();
        // 对象调用(编译出错)
        cart.fun1();
        // 类名调用(编译出错)
        Cart.fun1();
        // 接口名调用
        Vehicle.fun1();
    }
}

interface Vehicle {
    static void fun1() {
        System.out.println("Vehicle接口中的静态方法");
    }
}

class Cart implements Vehicle {
    // 继承了Vehicle中的fun1()方法
}

私有方法的使用
1、私有方法:只有默认方法可以调用。
2、私有静态方法:默认方法和静态方法可以调用。
如果一个接口中有多个默认方法,并且方法中有重复的内容,那么可以抽取出来,封装到私有方法中,供默认方法调用,从设计的角度上来讲,私有方法是静态方法和默认方法的辅助。
接口的多实现
在继承体系,一个类只能继承一个父类,而对于接口而言,可以实现多个接口,即接口的多实现,一个类可以同时继承一个类和实现多个接口。

  • 抽象方法:接口中有多个抽象方法,实现类必须重写所有的抽象方法。如果抽象方法有重名,只需要重写一次。
  • 默认方法:接口中,有多个默认方法时,实现类可以继承使用。如果默认方法有重名,必须重写一次。
  • 静态方法:接口中,存在同名的静态方法并不会冲突,原因是只能通过各自接口名访问静态方法。
class 类名 [extends 父类名] implements 接口名1,接口名2,接口名3... {   
      // 重写接口中抽象方法【必须】    
      // 重写接口中默认方法【不重名时可选】    
}

优先级的问题
当一个类继承一个类,又同时实现多个接口。若父类中的成员方法与接口中的默认方法重名,子类就近执行父类的的成员方法。
在这里插入图片描述
接口的多继承【了解】
一个接口能继承另一个或者多个接口,这和类之间的继承比较相似。接口继承使用extends关键字,子接口继承父接口的方法。如果父接口中的默认方法有重名,那么子接口需要重写一次。

interface A {
    default void method() {
        System.out.println("AAAAAA");
    }
}

interface B {
    default void method() {
        System.out.println("BBBBBB");
    }
}

interface C extends A, B {
    @Override
    default void  method() {
        System.out.println("CCCCCC");
    }
}

子接口重写默认方法时,default 关键字可以保留
子类重写默认方法,default 关键字不可以保留

接口中,无法定义成员变量,但是可以定义常量其值不可以改变,默认使用public static final修饰。
接口中,没有构造方法,不能创建对象。
接口中,没有静态代码块。
扩展default关键字
default关键字是Java 8中引入的关键字,也可称为Virtual。用该关键字修饰的方法称为默认方法,是为了确保与旧版本的代码兼容,并且不用在其子类逐个实现,可以解决接口升级的问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值