java 接口

2.1.2 什么是接口

接口在JAVA编程语言中是一个抽象类型,通常以interface来声明。

从面向对象编程的角度,可以将接口理解为对不同类型的事物的共同的行为特征的抽象。例如,鹰和飞机属于不同类型的事物,但是都有飞行的行为特征。

2.1.3 接口和抽象类

抽象类和接口都属于抽象的概念,它们有一些区别,可以从同类别和跨类别的角度来考虑:

  • 同一种类别的公共行为和属性可以抽取到抽象类中。抽象类用于表示一种具有共性的类,可以包含实现的方法和具体的属性。比如,对于喜鹊和老鹰这两种鸟类,它们都属于鸟类的范畴,可以将它们共同的行为和属性抽象到一个抽象类(如Bird)中,以实现代码的重用和扩展。
  • 不同种类的公共行为可以抽取到接口中。接口用于定义一组相关的方法,用于表示某种能力或行为。比如,喜鹊、老鹰和飞机都具有起飞和着陆的功能,但它们并不属于同一种类,此时可以将与飞行相关的共同行为抽取到一个接口(如Flyable)中,不同类别的对象可以通过实现该接口来具备飞行的能力。

根据以上原则,对于喜鹊来说,它可以继承自抽象类Bird,以获取鸟类的共性属性和行为,并且还可以实现接口Flyable,以具备飞行的能力。

抽象类和接口的设计原则:

  • 将所有子类共有的方法抽象化到父类中,可以使用抽象类。
  • 将部分子类中的公共方法抽象化到接口中,适用于不同类别但具有相似行为的对象。

通过合理地使用抽象类和接口,可以实现代码的复用和扩展,并且更好地表示对象之间的关系和行为。选择使用抽象类还是接口取决于具体的设计需求和对象之间的关系。

2.2.1 接口的语法

使用interface定义接口:

1、接口中只能定义常量和方法

  • 可以省略常量的修饰词 public static final
  • 可以省略抽象方法修饰词 public abstract

2、接口不能实例化创建对象,

3、接口只能被继承,作为父类型被子类型实现

比如,定义飞行接口:

  • 包含常量ID
  • 包含 3 个抽象方法

一个类可以实现多个接口:实现的接口直接用逗号分隔。

定义接口 Flyable 和类 Bird,并类 Plane实现接口Flyable,以及类 Eagle 继承Bird并实现Flyable;编写代码测试接口的用法。

案例示意代码如下所示:

 
  1. package oop_04.interface01;
  2. /**
  3. * 飞行接口
  4. */
  5. public interface Flyable {
  6. int ID = 1;
  7. /**
  8. * 起飞
  9. */
  10. void takeOff();
  11. /**
  12. * 飞行
  13. */
  14. void fly();
  15. /**
  16. * 着陆
  17. */
  18. void land();
  19. }
  20. package oop_04.interface01;
  21. public class Plane implements Flyable{
  22. @Override
  23. public void takeOff() {
  24. System.out.println("Plane takeOff...");
  25. }
  26. @Override
  27. public void fly() {
  28. System.out.println("Plane fly...");
  29. }
  30. @Override
  31. public void land() {
  32. System.out.println("Plane land...");
  33. }
  34. }
  35. package oop_04.interface01;
  36. public class Bird {
  37. public void eat(){
  38. System.out.println("eat...");
  39. }
  40. public void sleep(){
  41. System.out.println("sleep...");
  42. }
  43. }
  44. package oop_04.interface01;
  45. public class Eagle
  46. extends Bird implements Flyable{
  47. @Override
  48. public void takeOff() {
  49. System.out.println("Eagle takeOff...");
  50. }
  51. @Override
  52. public void fly() {
  53. System.out.println("Eagle fly...");
  54. }
  55. @Override
  56. public void land() {
  57. System.out.println("Eagle land...");
  58. }
  59. }
  60. package oop_04.interface01;
  61. public class InterfaceDemo1 {
  62. public static void main(String[] args) {
  63. // Flyable flyable=new Flyable(); // 接口不可被实例化
  64. System.out.println(Flyable.ID); // 接口中定义的是静态常量
  65. Flyable eagle = new Eagle(); // 接口类型引用指向实现类的对象
  66. eagle.fly(); // 实际执行实现类重写的方法逻辑
  67. Flyable plane = new Plane(); // 接口类型引用指向实现类的对象
  68. plane.fly(); // 实际执行实现类重写的方法逻辑
  69. // eagle.eat(); // 无法访问实现类特有的方法
  70. }
  71. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值