接口

为什么会有接口呢?

问题的产生:上一篇学了抽象类,我们应该知道,抽象类存在的必要性,但有的时候,个别的子类中的方法不太适合提取成为共性方法,我们就会考虑在这个子类中写其独有的的方法,但这个独有的方法又不是一个类中独有的,而是好几个。那么就会出现上次提到的方法独写出现的弊端,就是方法的格式(返回值、方法名)不确定。总的来说就是一些方法不是所有类的共性,但又不是单独一个类的方法,通配无法满足,独写又出现问题,所以产生了接口(interface)来解决这个问题。就是在接口中书写适用于部分类的方法,这些类通过与接口发生关系来使独特的方法得以实现,并且,在接口内对方法的格式进行了规范。当需要给多个类但又不是全部类定义规则时,我们就使用接口
学到这里,我们对真正的方法独写有一个更细的认识,只有当某个行为,只在某一个类当中存在时,我们再把这个行为读写进这个类中
接口的应用:
1.首先是解决了上述的问题
2.接口中写的方法,只要与类发生关系,那么这个类的对象就可以使用这个方法。(这不像父类中写的方法只能被继承了的子类使用,其他父类的子类也能使用)接口是对行为的抽象,这是明显区别于抽象类的

如何定义一个接口

接口的定义和使用

  • 接口用关键字interface来定义
    public interface 接口名{}
  • 接口不能实例化(说白了就是不能创建对象)
  • 接口和类之间是实现关系,通过implements关键字表示,格式:
    public class 类名 implements 接口名 {}
  • 接口的子类(实现类,这里所指的子类(实现类),就是需要调用这个方法的类
    在实现类当中,要么重写所有抽象方法;要么把类定义为一个抽象类(这与抽象类有些相似)

    **注意1:
  • 接口和类的实现关系,可以单实线,也可以多实现,如:
    public class 类名 implements 接口名1,接口名2{}**

**注意2:

  • 实现类还可以在继承一个类的同时实现多个接口,如:
    public class 类名 extends 父类 implements 接口名1,接口名2{}**

如何使用一个接口

接口里面成员的特点

成员变量

  • 只能是常量
    默认修饰符:public static final
    接口是一种只是规则,多个类的共有属性是不会提取到接口中的而是在父类当中,所以基于这种特点,接口中的属性一般定义为常量。static的目的是为了方便常量被调用(接口名.常量名,即可调用)。public的目的是表示公共的,在任何地方都可以调用。
    报错:

构造方法

没有。前面说了接口的作用,并且接口不能创建对象,所以用不着给对象的属性初始化,所以没有构造方法

成员方法

默认public abstract修饰
jdk7以前,只能有抽象方法;之后,接口中可以定义私有方法。
写了括号后报错

没有重写接口方法,报错

接口和类之间的关系

类和类之间的关系

继承关系,只能单继承,不能多继承,可以多层继承

类和接口之间的关系

**实现关系,可以单实现,也可以多实现,还可以在继承一个父类的同时实现多个接口(注意:对接接口,要将所有的抽象方法重写
而如果多个接口中有相同的抽象方法那该如何解决呢?
**
这个情况是:两个接口,但方法没有相重的

这个情况是有想重的

根据idea提示,可以看出,我们只需要将重复的方法重写一次就可以了;而且,如果我们多写了,还会报错(用于在同一个类对接多个接口的情况当中)

接口和接口之间的关系

继承关系,可以单继承,也可以多继承(注意:如果实现类对接的是子类接口的话,那么实现类就要将该接口以上所有的抽象方法重写

根据上面的图片,可以看出,Inter5中只有一个方法,但由于继承关系,它就继承了Inter3中的方法,在测试类中idea提示要对方法进行重,并且是所有的抽象方法
但如果只是继承到接口4,那么接口5中的方法就不重写了,多写了就报错

原文地址:http://www.cnblogs.com/hezhipeng/p/16814508.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性