关于接口的简单理解

栏目: 后端 · 前端 · 发布时间: 5年前

内容简介:常见的猫狗案例 猫和狗它们仅仅提供一些基本功能。但有一些不是动物本身就具备的,比如:猫钻火圈,狗跳高等功能是在后面的培养中训练出来的,这种额外的功能,java提供了接口表示。

第五章 接口

5.1 接口概述

常见的猫狗案例 猫和狗它们仅仅提供一些基本功能。

但有一些不是动物本身就具备的,比如:猫钻火圈,狗跳高等功能

是在后面的培养中训练出来的,这种额外的功能,java提供了接口表示。

5.2 接口特点

A:接口用关键字interface表示

[public] interface 接口名{
}
  1. 接口中的方法不能具体实现,接口中的方法必须为抽象方法
  2. 接口中一般不定义变量,因为接口中的变量会被默认指定为 public static final 变量(只能是)

B:类实现接口用implements 表示

class 类名 implements 接口1,接口2,[....]{
}

1.一个类(非抽象类)可以遵循多个接口,并且需要实现(重写)该接口中所有的方法

2.子类为抽象类的意义不大

5.3 接口的成员特点

A:成员变量

只能是常量

​ 默认修饰符:public static final

B:构造方法

​ 没有构造方法

C:成员方法

​ 只能是抽象的

​ 默认修饰符:public abstract

5.4 抽象类和接口的区别(重要)

我们从我们实际设计场景中来切入这个话题

先来举一个简单的例子:

狗都具有 eat() 、sleep() 方法,我们分别通过抽象类和接口定义这个抽象概念

//通过抽象类定义
public abstract class Dog {
    public abstract void eat();
    public abstract void sleep();  
}
//通过接口定义
public interface Dog {
    public abstract void eat();
    public abstract void sleep();
}

但是我们现在如果需要让狗拥有一项特殊的技能——钻火圈 DrillFireCircle(),如何增加这个行为呢?

思考:

  1. 将钻火圈方法与前面两个方法一同写入抽象类中,但是这样的话,但凡继承这个抽象类狗都具有了钻火圈技能,明显不合适
  2. 将钻火圈方法与前面两个方法一同写入接口中,当需要使用钻火圈功能的时候,就必须实现 接口中的eat() 、sleep() 方法(重写该接口中所有的方法)显然也不合适

那么该如何解决呢 ? 我们可以仔细想一想,eat和sleep都是狗本身所应该具有的一种行为,而钻火圈这种行为则是后天训练出来的,只能算是对狗类的一种附加或者延伸, 两者不应该在同一个范畴内,所以我们考虑将这个单独的行为,独立的设计一个接口,其中包含DrillFireCircle()方法, Dog设计为一个抽象类, 其中又包括eat() 、sleep() 方法.

一个SpecialDog即可继承Dog类并且实现DrillFireCircle()接口

下面给出代码:

//定义接口,含有钻火圈方法
public interface DrillFireCircle() {
    public abstract void drillFireCircle();
}

//定义抽象类狗类
public abstract class Dog {
    public abstract void eat();
    public abstract void sleep();
}
 
//继承抽象类且实现接口
class SpecialDog extends Dog implements drillFireCircle {
    public void eat() {
      //....
    }
    public void sleep() {
      //....
    }
    public void drillFireCircle() () {
      //....
    }
}

总结:

继承是一种 "是或不是"的关系,而 接口 实现则是 "有或没有"的关系。如果一个类继承了某个抽象类,它的子类则一定是抽象类的种类,而接口实现则是有或者没有、具备或者不具备的关系,比如狗是否能钻火圈,能则可以实现这个接口,不能就不实现这个接口。

结尾:

如果内容中有什么不足,或者错误的地方,欢迎大家给我留言提出意见, 蟹蟹大家 !^_^

如果能帮到你的话,那就来关注我吧!

一个坚持推送原创 Java 技术的公众号:理想二旬不止


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Mathematica Cookbook

Mathematica Cookbook

Sal Mangano / O'Reilly Media / 2009 / GBP 51.99

As the leading software application for symbolic mathematics, Mathematica is standard in many environments that rely on math, such as science, engineering, financial analysis, software development, an......一起来看看 《Mathematica Cookbook》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

随机密码生成器
随机密码生成器

多种字符组合密码