面向对象:12、接口

本文详细介绍了接口与抽象类的概念及其在Java中的使用。接口作为规范的定义,强调了面向接口编程的重要性,它允许类实现多个接口以克服单继承的限制。而抽象类作为类的抽象,提供了部分实现。两者在设计模式中扮演关键角色,是系统设计的重要组成部分。此外,接口的主要作用在于实现统一访问,通过接口创建对象可以灵活地切换不同的实现类。示例代码展示了接口的定义、实现和使用。
摘要由CSDN通过智能技术生成

面向对象:12、接口

1、什么是接口

接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。全面地专业地实现了:规范和具体实现的分离

接口就是规范,定义的是一组规则,体现了现实世界中“如果你是…则必须能…”的思想。如果你是天使,则必须能飞。如果你是汽车,则必须能跑。如果你好人,则必须干掉坏人;如果你是坏人,则必须欺负好人

接口的本质是契约,就像我们人间的法律一样。制定好后大家都遵守

面向对象中OO的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象

2、接口的使用
  • 接口使用interface来定义

  • Java中接口和类是并列的结构

  • 如何定义接口:定义接口中的成员

    • JDK7及以前:只能定义全局常量和抽象方法
    • 全局常量:public static final的.但是书写时,可以省略不写
    • 抽象方法:public abstract的
    • JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法
  • 接口中不能定义构造器,意味着接口不能进行实例化

  • Java开发中,接口通过让类去实现(implements)的方式来使用.如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类

  • Java类可以实现多个接口 —>弥补了Java单继承性的局限性

    格式:class AA extends BB implements CC,DD,EE

  • 接口与接口之间可以继承,而且可以多继承

3、接口和抽象类的区别

接口

  • 接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。全面地专业地实现了:规范和具体实现的分离。
  • 抽象类还提供某些具体实现,接口不提供任何实现,接口中所有方法都是抽象方法。接口是完全面向规范的,规定了一批类具有的公共方法规范。
  • 从接口的实现者角度看,接口定义了可以向外部提供的服务。
  • 从接口的调用者角度看,接口定义了实现者能提供那些服务。
  • 接口是两个模块之间通信的标准,通信的规范。如果能把你要设计的系统之间模块之间的接口定义好,就相当于完成了系统的设计大纲,剩下的就是添砖加瓦的具体实现了。在工作以后,做系统时往往就是使用“面向接口”的思想来设计系统。

抽象类

  • 抽象类也是类,除了可以写抽象方法以及不能直接new对象之外,其他的和普通类没有什么不一样的。接口已经另一种类型了,和类是有本质的区别的,所以不能用类的标准去衡量接口
  • 声明类的关键字是class,声明接口的关键字是interface
  • 抽象类是用来被继承的,java中的类是单继承
  • 类A继承了抽象类B,那么类A的对象就属于B类型了,可以使用多态
  • 一个父类的引用,可以指向这个父类的任意子类对象
    • 注:继承的关键字是extends
  • 接口是用来被类实现的,java中的接口可以被多实现
  • 类A实现接口B、C、D、E…,那么类A的对象就属于B、C、D、E等类型了,可以使用多态
  • 一个接口的引用,可以指向这个接口的任意实现类对象
    • 注:实现的关键字是implements
4、接口的作用

接口的最主要的作用是达到统一访问,就是在创建对象的时候用接口创建

【接口名】 【对象名】= new 【实现接口的类】

这样你像用哪个类的对象就可以new哪个对象了,不需要改原来的代码。

假如我们两个类中都有个function()的方法,如果我用接口,那样我new a();就是用a的方法,new b()就是用b的方法

这个就叫统一访问,因为你实现这个接口的类的方法名相同,但是实现内容不同

public class InterfaceTest {
   public static void main(String[] args) {
      System.out.println(Flyable.MAX_SPEED);
      System.out.println(Flyable.MIN_SPEED);
//    Flyable.MIN_SPEED = 2;
      
      Plane plane = new Plane();
      plane.fly();
   }
}


interface Flyable{
   
   //全局常量
   public static final int MAX_SPEED = 7900;
   //第一宇宙速度
   int MIN_SPEED = 1;
   //省略了public static final
   
   //抽象方法
   public abstract void fly();
   //省略了public abstract
   void stop();
   
   
   //Interfaces cannot have constructors
// public Flyable(){
//    
// }
}

interface Attackable{
   
   void attack();
   
}

class Plane implements Flyable{

   @Override
   public void fly() {
      System.out.println("通过引擎起飞");
   }

   @Override
   public void stop() {
      System.out.println("驾驶员减速停止");
   }
   
}

abstract class Kite implements Flyable{

   @Override
   public void fly() {
      
   }
   
}

class Bullet extends Object implements Flyable,Attackable,CC{

   @Override
   public void attack() {
      // TODO Auto-generated method stub
      
   }

   @Override
   public void fly() {
      // TODO Auto-generated method stub
      
   }

   @Override
   public void stop() {
      // TODO Auto-generated method stub
      
   }

   @Override
   public void method1() {
      // TODO Auto-generated method stub
      
   }

   @Override
   public void method2() {
      // TODO Auto-generated method stub
      
   }
   
}
//************************************

interface AA{
   void method1();
}
interface BB{
   
   void method2();
}

interface CC extends AA,BB{
   
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

好汤圆

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

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

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

打赏作者

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

抵扣说明:

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

余额充值