Java接口详解

原创 2018年04月17日 10:53:48

作者:云都小生


概述



在Java面向对象中,Java与C#同样,只支持单继承关系——即一个类只能有一个父类。但是现实中却有这样的需求——金银花是一种花,但它还是一种草药。如何解决这种需求,我们就需要用到接口。

一个类只能继承一个父类,但是一个类可以实现多个接口。

接口是一系列方法的声明,是一些列方法特征的集合,一个接口只能纯粹有方法的特征,但方法不能有实现。这是与抽象类的区别。


了解语法



我们来看一下接口的语法

public interface 接口名
{
    public 返回值 方法名称(参数列表);
    ····
}

记住,在接口中,只有方法的声明,不允许定义方法的实体。

如何实现一个接口?

public class 类名 implements 接口名称
{
    //若是有接口方法,就必须实现
}

无论该类实现的接口有多少个方法,都需要在实现类中实现。

package InterfaceText;

public interface IEat {
    public void eat();
}

class Student implements IEat
{
    public void eat()
    {
        System.out.println("学生去食堂吃饭");
    }
}

class Police implements IEat
{
    public void eat()
    {
        System.out.println("警察去餐厅吃饭");
    }
}

来看一个实现类Test的代码

package InterfaceText;

public class Test {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.eat();

        Police pol = new Police();
        pol.eat();

        //Java允许这样的语法
        //这个是时候实现的,依旧是真是对象(stu)的方法
        IEat ie1 = stu;
        ie1.eat();

        IEat ie2 = pol;
        ie2.eat();
    }
}

接口并不在乎实现类是如何实现的,只要实现类有实现这个方法即可。

这些代码传达的是,我们可以将实现该接口的类看成是一个接口,但是实际上调用方法,还是会以多态去实现。


实现多个接口



实现多个接口的语法是

public class 实现类 implements 接口1,接口2,接口3
{

}

当实现多个接口的时候,可能会碰到一个难点——实现的多个接口中声明了一模一样的方法,这个时候,只需要实现一次即可。

public interface IA {
    public void test();
}

public interface IB {
    public void test();
}

public class Test implements IA,IB
{

    public void test() 
    {
        //实现一次即可
    }

}

另一种情况是这样的,两个接口的同样的方法名不同的返回值,

public interface IA {
    public void test();
}

public interface IB {
    public int test();
}

public class Test implements IA,IB
{

}

这个时候就很麻烦了,两个接口提供了同名不同返回值的方法,实现类实现了这两个接口之后,必须实现这两个方法。

但是,返回值不是判定是否为方法重写的标准,接口要求重写,实现类又不能同时写两个一样的方法。这个时候要么就选择修改接口的方法名,要么选择不实现该接口了。


不实现接口的所有方法



如果继承了一个抽象类,该抽象类继承于某个接口,那这个具体类就要实现接口和抽象类中声明的方法。

public interface A {
    public void MethodA();
}

abstract class B implements A
{
    //抽象类实现了接口,可以不实现接口定义的方法
    public abstract void MethodB();
}

class Test extends B
{
    //如果继承了一个实现接口的抽象类,就必须实现接口、抽象类声明的所有方法

    @Override
    public void MethodA() {}

    @Override
    public void MethodB() {}

}


可以算是总结的总结


接口不允许被实例化——不允许用new创建对象。

接口的实现类需要实现接口类声明的所有方法,如果不想实现,需要将自身变成抽象类。

实现类可以实现多个接口。

public class 实现类 : 父类 implements 接口1,接口2····

继承一个实现了接口的抽象类,必须实现接口、抽象类所定义的抽象方法,若出现有同命的方法,默认重写抽象类的方法。


面试难点


难点1:一个类实现了多个接口,这些接口都定义了相同的方法

Java中只能实现一次多个接口相同名的方法
若出现同一个方法名但不同返回值,就违背了方法重载的要求(返回值不是)

难点2:抽象类实现接口

抽象类在实现接口的时候可以不实现接口的方法。但是实现这个抽象类的底层类,就必须实现抽象类、接口的所有方法。

难点3:接口继承接口

没有接口实现接口,只有接口继承接口这种语法

public interface IA extends IB{}

2018/4/14 21:43:30 @Author:云都小生

版权声明:原创文章,转载注明! https://blog.csdn.net/Cloudkings/article/details/79971630

Java接口 详解(二)

上一篇Java接口 详解(一)讲到了接口的基本概念、接口的使用和接口的实际应用(标准定义)。我们接着来讲。一、接口的应用—工厂设计模式(Factory)我们先看一个范例:package com.wz....
  • wei_zhi
  • wei_zhi
  • 2016-10-06 12:16:01
  • 2466

Java 接口interface的详解

1.接口的概述 主要是使用接口来拓展定义类的功能,可以弥补java中单继承的缺点。 2.接口的定义格式 interface 接口名{ 属性 抽象方法 } 接口的体验 inte...
  • qq_33642117
  • qq_33642117
  • 2016-07-16 21:50:17
  • 874

JAVA常用集合框架用法详解基础篇一之Colletion接口

首先,在学习集合之前我们能够使用的可以存储多个元素的容器就是数组。 下面举几个例子主要是引出集合类的: 1、8,4,5,6,7,55,7,8  像这样的类型相同的可以使用数组来存储,本例可以用in...
  • LULEI1217
  • LULEI1217
  • 2016-03-27 21:26:12
  • 1176

Java接口 详解(一)

一、基本概念接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。如果一个类只由抽象...
  • wei_zhi
  • wei_zhi
  • 2016-10-06 00:46:42
  • 35949

Java中的锁-Lock接口解析

提到java中的锁,相信大家都知道它是用来控制多个线程访问共享资源的方式(即锁能防止多个线程同时访问空享资源而出现线程安全问题)。在实践过程中使用最多的也最常见的锁就是 synchronized 在j...
  • canot
  • canot
  • 2016-07-27 23:51:13
  • 14484

Java多线程Condition接口原理详解

Condition接口提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式,但是这两者在使用方式以及功能特性上还是有差别的 Condition接口详解Condition定义了等待...
  • fuyuwei2015
  • fuyuwei2015
  • 2017-05-21 19:15:23
  • 1653

JPA2_doc 文档资料

  • 2010年06月29日 15:18
  • 473KB
  • 下载

Java8学习笔记(四)-Function接口详解

一、先看一下Function接口的API说明 /* * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights res...
  • MirindaSai
  • MirindaSai
  • 2017-07-27 00:00:30
  • 339

ATL接口映射宏详解 ATL接口映射宏详解 ATL接口映射宏详解

  • 2011年07月01日 08:25
  • 142KB
  • 下载

深度解析java接口回调机制

一、系统源码分析 package com.itheima.testinterface;public class CompoundButton { /** * 接口回调四步走战略:1.定义一个接口(...
  • u014756517
  • u014756517
  • 2016-11-14 15:47:17
  • 921
收藏助手
不良信息举报
您举报文章:Java接口详解
举报原因:
原因补充:

(最多只允许输入30个字)