Java中的接口是什么?

来源:互联网 发布:openwrt软件源地址 编辑:程序博客网 时间:2024/06/04 18:14

我眼里的接口
从字面上理解“接口”,就像你家的电源插座一样,你只要一看到它就知道,可以用来给手机充电,电视机、电脑通电源。这时候你并不会去管它为什么能给手机充电,电脑通电源。因为这对你来说并不重要,你只需要知道它可以用来做什么,你也不会去管它是什么牌子的插座,是公牛的,还是西门子的,因为你不需要去了解这些,你只需要它实现它的功能。

接口定义的基本语法:
[修饰符]interface 接口名 [extends父接口1,父接口2…]
{
零到多个常量定义…
零到多个抽象方法的定义…
}

比如我们出去玩,然后突然肚子饿了,看见一个KFC的店,我们就知道有地方可以吃东西喝东西了。这里KFC就像是一个接口,我们不用知道KFC里面的汉堡、薯条、果汁、可乐是怎么做出来的,也不用知道是谁开的店,我们只需要知道有的吃,有的喝就可以了。
这里定义一个名为KFC的接口:

public interface KFC {  public void eat();  public void drink();}

然后一个小孩本来在外面玩耍,我们创建一个小孩类

public class Kid {      public static void main(String[] args) {        System.out.println("小孩在玩耍");      } }

小孩玩着玩着肚子饿了,走进了KFC,我们理解为,在孩子类中与KFC接口的产生了连接,也就是接口的方法规范

public class Kid implements KFC{      public static void main(String[] args) {        System.out.println("小孩在玩耍");      }public void eat() {        System.out.println("小孩在吃汉堡");      }public void drink() {        System.out.println("小孩在喝可乐");      }  }

然后这个小孩的父母出来找这个小孩,我们创建一个父母类

public class Parents {    public static void main(String[] args) {   System.out.println("父母在找小孩");    } }

然后找到了KFC,发现小孩在吃的很开心,于是,父母也在KFC陪小孩一起吃,这时候同样理解为,KFC接口在父母类的方法规范

public class Parents implements KFC {    public static void main(String[] args) {   System.out.println("父母在找小孩");    }    public void eat() {        System.out.println("父母在吃薯条");    }    public void drink() {        System.out.println("父母在喝果汁");    } }

然后小孩和父母都在KFC吃东西喝东西,这里理解为KFC接口的实现

public class useKFC {   public static void main(String[] args) {        KFC kid=new Kid();        KFC parents=new Parents();        kid.eat();        kid.drink();        parents.eat();        parents.drink();    }}

输出内容为:
小孩在吃汉堡
小孩在喝可乐
父母在吃薯条
父母在喝果汁

我们还可以通过关键字instanceof检测接口对象”kid和parents”是否实现了”第一个接口”,返回一个布尔值

public class useKFC {   public static void main(String[] args) {        KFC kid=new Kid();        KFC parents=new Parents();        kid.eat();        kid.drink();        parents.eat();        parents.drink();        System.out.println(kid instanceof KFC);        System.out.println(parents instanceof KFC);    }}

输出结果:
小孩在吃汉堡
小孩在喝可乐
父母在吃薯条
父母在喝果汁
true
true

接口与类相似点:
一个接口可以有多个方法。
接口文件保存在 .java 结尾的文件中,文件名使用接口名。
接口的字节码文件保存在 .class 结尾的文件中。
接口相应的字节码文件必须在与包名称相匹配的目录结构中。

接口与类的区别:
接口不能用于实例化对象。
接口没有构造方法。
接口中所有的方法必须是抽象方法。
接口不能包含成员变量,除了 static 和 final 变量。
接口不是被类继承了,而是要被类实现。
接口支持多重继承。

接口特性:
接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误。
接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

抽象类和接口的区别:
1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
3. 接口中不能还有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

1 0
原创粉丝点击