Java接口详解


作者:云都小生


概述



在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:云都小生

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值