4.4接口(P99-103)

接口

在Java中接口是一个用于实现多继承功能的机制。

展开来说,Java只支持单继承,即:一个类只能继承自一个父类。

但一个类却能够实现多个接口,从而实现类似拥有多个父类的功能。

小结

接口的定义

完整定义:

[public][abstract]interface 接口名[extends 父接口列表]{
    [[public static final]常量类型 常量名 = 常量值;]
    [[public abstract]返回类型 方法名(参数列表);]
    [[public] static 返回类型 方法名(参数列表){}]  //Java 8
    [[public] default 返回类型 方法名(参数列表){}]  //Java 8
}

1.接口是静态常量(static final)和抽象方法(abstract )的集合,某种意义上类似于抽象类,但它不是类。

2.在非(集成环境下)默认的同一个包中,接口与接口的实现类,一般用public修饰这两者中的一个(一个java文件中只允许有一个共有类)。否则在默认权限下,只有同一个包的类才能实现该接口,或者只有同一个包中的类才能继承该接口的实现类,这两个问题在外包import也不能解决。(涉及后面要讲的“包”)

3.后续Java8在接口中追加了静态方法和默认方法。

用public修饰的静态方法(static),具有以下特性:
①以接口名.方法名(参数列表)的形式访问;
②不能被子接口继承,也不能被实现类继承;
用public修饰的默认方法(default),具有以下特性:
①能被子接口继承,也能被实现类继承;
②需要通过对象调用;

接口的实现

1.接口实现时需注意以下几点:
①接口定义时可以省去修饰方法的public,但实现时需显示的写出来,否则会造成“范围缩减”从而产生错误。而在实现时abstract反而要去掉;
②若实现类为非抽象类,则需实现接口中的所有抽象方法;

2.当实现类一次实现多个接口时,多个接口中都有同名的A方法:需在实现类中重新定义方法A,若想等效于某一父接口中的定义,可在实现类中方法A的方法体内写“父接口名.super.方法A.(参数列表)”;

3. 实现类的父类中有与接口中有同名的方法:生成实例化对象后,调用时会采用父类的方法,即:类>接口。

接口与多态

使用方法类似4.3中小结第5点
声名一个接口的变量A(对象);
创建一个实现类的实例化对象b;
将b赋给A,通过“A.方法(参数列表)”来调用实现类中的方法;

同理,A可“指向”不同实现类的实例化对象,并调用方法,以实现多态。

接口与抽象类

接口也是抽象的,不能实例化对象,但接口与抽象类有以下区别:
①接口中没有变量,只有常量;
②接口中所有方法都是抽象的;
③接口能继承多个父接口,但不能继承类;
④接口与实现它的类不构成类的继承体系,即:不相关的类也可以实现相同的接口;
⑤接口相较于抽象类,没有强行形成继承关系。能使子类对象向上转型为多个接口类型(接口与多态);

接口的扩展

1.在接口定义甚至已经使用后,想要再次拓展时,为不影响原接口工作,可以通过继承原有的接口,并在子接口中增添新的方法。

2.一个接口能继承多个接口,故也可以用作合并多个接口。

3.另外,子接口同样可以重定义父接口中的方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

几绪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值