Java中的接口(interface)基础实例详解

接口(interface)

接口与类平级,可以很好的解决单继承的限制(eg:一个子类想继承两个或多个父类的方法)

一、接口的特点

        (1)接口本身不能创建对象,只能创建接口的实现类对象,接口类型的变量可以与实现类的对象构成多态引用。

        (2)接口的成员只能是如下几个:

                ​ A:公共的静态常量( public static final可以省略)

                ​ B:公共的抽象方法(public abstract可以省略)

                ​ C: JDK1.8之后,公共的静态方法(public static,其中public可以省略)

                ​ D:JDK1.8之后,公共的默认方法(public default,其中public可以省略)

                E: JDK1.9之后,私有的方法(private,不能省略)说明接口中是没有构造器等其他成员。

        (3)类可以实现接口,而且支持多实现

                【修饰符】class 实现类名 implements 父接口们 {

                ​ }        

                父接口们:每一个接口使用逗号分隔

        如果一个类同时继承父类又实现接口,要把继承写在前,实现写在后。

                【修饰符】class 实现类名 extends 父类 implements 父接口们{

                ​ }

        一般,子类继承父类,称为父子类,类实现接口,通常称为实现类和父接口。​

        比喻:直接父类->亲生父亲,只有一个

                ​ 父接们->干爹们

        (4)接口与接口之间也可以继承,而且是多继承。

           总结:​

                类->类 extends 单继承​

                类->接口 implements 多实现​

                接口->接口 extends 多继承

        (5)实现类实现接口时,必须实现接口的所有抽象方法。如果实现类没有实现接口的抽象方法,那么实现类就要声明为抽象类(6)实现类可以选择重写接口的默认方法。在实现类中重写默认方法时,要把"default" 去掉。因为类里面没有默认方法一说。(7)接口的静态方法不能被实现类继承,也不能被实现类重写。

二、关于接口

1、接口声明格式:

        ​ 【修饰符】 interface 接口名{

        ​ }

2、接口的成员

(1)接口中不允许声明非静态变量之外的成员变量,换句话说,如果要声明成员变量,只能声明公共的静态变量

public static final ,这三个单词可以省略不写

(2)JDK1.8之前,接口中只允许有公共的抽象方法,不允许有其他方法。

public abstract ,这两个单词可以省略不写

(3)JDK1.8之后,接口允许声明公共的静态方法

public static , 其中public允许省略,static不允许省略

(4)JDK1.8之后,接口允许声明公共的默认方法

public default , 其中public允许省略,default不允许省略

为什么JDK1.8之前,只允许有公共的抽象方法?

因为接口代表的是行为标准,它只是规定了方法的“签名”。

​ 方法 = 方法头 + 方法体

​ 方法头又称为方法签名,【修饰符】 返回值类型 方法名(【形参列表】);

​ 方法体:{语句}

​ 方法签名中就已经能看出,如何使用这个方法,以及这个方法的功能(因为方法名是见名知意的一个标识符,代表方法功能)。

​ 至于方法体,不同的实现类(如果拿USB作比喻的话,不同的具体设备的实现标准是不同的)

为什么JDK1.8之后,又引入了静态方法和默认方法呢?

因为随着JDK的版本越来越多,里面的API难免需要升级。

早期如果定义了一个接口,它包含1个抽象方法;

现在JDK版本升级了,想要给这个接口增加一个方法,如果按照JDK1.8之前的原则,只能增加抽象方法

如果给这个接口增加抽象方法,就回导致它所有的实现类,全部要跟着升级,重新写这个新的抽象方法,这个影响就太大了

为了避免这个情况的出现,允许接口中出现默认方法。

为什么JDK1.8之后,又引入了静态方法呢?

原来很多接口,针对它的工具类性质的方法,都是单独用另一个类实现的。

所以JDK1.8就觉得,可以被针对这个接口的工具类性质的静态方法,干脆方法哦接口中就好,少一个.java文件。

(5)JDK1.9之后,接口中允许出现私有方法。

为什么JDK1.9之前,接口中的成员全部是公共的?

因为接口是代表标准,标准是给大家看到,给大家遵守的,所欲需要公开。

为什么JDK1.9之后,要增加私有方法呢?

因为自从JDK1.8运行在接口中出现默认方法和静态方法这种有方法体的形式之后,接口中出现了很多冗余的代码,很多当打实现有公共部分。

三、接口成员的使用规则

1、如何使用接口的公共的静态常量?​ 接口名.常量名 (eg: Flyable.MAX_SPEED)

 

2、如何使用接口静态方法?

接口名.静态方法 ( eg: void method ( ) )

3、子类可以继承父类的接口吗? 可以的

​ 不过需要强调的是,子类可以继承父类的静态方法,即子类名.父类的静态方法是可以的;实现类不可以继承接口的静态方法,即实现类名,父接口的静态方法是错误的(eg: Bird.method( ) ; 这种写法就是错误的)

​ 子类不能重写父类的静态方法。

​ 实现类也不能重写接口的静态方法

总结:接口的静态只有一种方式可以用,即“ 接口名.静态方法 ”

4、如何使用接口的抽象方法?

只能通过实现类实现抽象方法,然后由实现类调用;

 5、如何使用接口的默认方法?只能通过实现类对象使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值