什么是接口

  接口和抽象类很相似,也是一种抽象的概念,用Interface关键字来修饰。那有了抽象类为啥还要有个接口呢,既然都是抽象的,要一个不就可以了吗?其实不是这样的,抽象类是对一类事物共性的一种抽象,但是对于一些属于部分个体的特性和功能,我们需要接口来进行扩充。例如:Person是对不同人的抽象,如黑人,白人,黄种人等,他们都有姓名,年龄,肤色等属性,都会走,会跑,会吃东西,会睡觉这些功能,但是对于一些特技,例如有些人有普通人不具备的特性,例如会将手转360度,这些特别的非共性的东西可以放在接口中,拥有这种特性的人可以实现接口达到继承抽象方法 相似的目的。

接口中的成员特点

从接口中的成员变量,构造方法和成员方法去总结。

  1. 成员变量:
    成员变量不管是否显示定义类型,都默认为public static final类型的静态常量,所以不能被修改,继承,可以通过接口名去访问 ;
  2. 构造方法:
    接口没有构造方法!!!这个和抽象类不同。那实现接口的子类如何初始化呢?因为子类初始化都默认调用super();
    class Student extends Object implements InterPerson{
    public Student() {
    super();
    }
    }

    其实所有类如果没有写继承类,默认都是extends Object这个祖先类,所以这里的super()调用的是Object类中的无参构造方法。

  3. 成员方法:
    成员方法默认是public abstract修饰的!也就意味中接口中的成员方法必须无方法体;这个不同于抽象类,抽象类中方法可以是抽象,也可以有自己的方法,而且也可以有非public类型方法。
    另外,由于成员方法默认是public abstract修饰的,所以自然不能和final以及static同时存在了。

总结起来就是:接口中无默认构造方法,所有成员变量都是public static final修饰的,所有的成员方法都是public abstract修饰的。

接口、类之间的继承(extends)实现(implements)关系

  1. 类与类:继承关系,只能单继承,但是可以多层继承;
  2. 类与接口:实现关系,一个类可以实现多个接口,以逗号分割;
    1. 一组测试用例,顺便测试下一个类继承两个接口并且接口中定义了相同的方法。
    2. /**
      * Created by lili on 15/10/23.
      */ interface Father {
      public abstract void show();
      } interface Mother {
      public abstract void show();//注意,这里定义的方法和Father中的一致
      public abstract void show2();
      } class Son implements Mother, Father{
      public void show(){
      System.out.println("Which show?");
      } public void show2() {
      System.out.println("Mother show");
      }
      } public class InterfaceTest {
      public static void main(String[] args) {
      Father father = new Son();
      father.show(); Mother mother = (Mother)father;
      mother.show(); mother.show2();
      }
      }

      运行结果:

    3. Which show?
      Which show?
      Mother show Process finished with exit code 0

      运行结果表明,Father接口的引用指向的Son的实例,再强制转为Mother的引用,还是可以访问show,说明这个show是Mother和Father接口中show的共同实现。

  3. 接口与接口:继承关系,可以单继承,也可以多继承。

抽象类和接口的区别

  1. 成员区别

    抽象类(abstract class):
      成员变量:可以变量,也可以常量(final类型)
      构造方法:有
      成员方法:可以抽象,也可以非抽象
    接口(interface):
      成员变量:只可以常量(public static final)
                 构造方法:无构造方法
      成员方法:只可以抽象(public abstrart)

2. 关系区别
   类与类:继承,单继承
   类与接口:实现,单实现,多实现
   接口与接口:继承,单继承,多继承

   3. 设计理念区别
   抽象类:被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
   接口:被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。

【Java基础】Java接口的总结的更多相关文章

  1. Java基础十--接口

    Java基础十--接口 一.接口的定义和实例 /* abstract class AbsDemo { abstract void show1(); abstract void show2(); } 8 ...

  2. Java基础-面向接口(interface)编程

    Java基础-面向接口(interface)编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的“类 ...

  3. Java基础-Java中23种设计模式之常用的设计模式

    Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...

  4. Java基础-Java数据类型

    Java基础-Java数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据类型的作用 数据类型就是一组值,以及这一组值上的操作,数据类型可以决定数据的存储方式,取值范围 ...

  5. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  6. Java基础-Java中的堆内存和离堆内存机制

    Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  7. Java基础-Java中的内存分配与回收机制

    Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.

  8. Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock)

    Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在学习Java的之前,你可能已经听说过读 ...

  9. Java基础-Java中的并法库之线程池技术

    Java基础-Java中的并法库之线程池技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是线程池技术 二.

  10. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

随机推荐

  1. javascript editor

    http://www.jetbrains.com/webstorm/download/download_thanks.jsp?os=win

  2. iOS 后台运行实现 --备用

    文一 我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时间. 还有三种类型的可以运行在后以,1.音乐2.location 3.voip 文二 ...

  3. MongoDB 配置文件启动

    MongoDB 服务启动有两种方式:一种是直接命令启动,一种是通过配置文件启动 1.命令启动: mongod -dbpath C:\data\db -logpath C:\data\log\mongo ...

  4. 实时动态更新曲线图,x轴时间s随数据的变化而变化

    $(function () {    $(document).ready(function () {        Highcharts.setOptions({            global: ...

  5. Burp Suite教程(英文版)

    In this article, we are going to see another powerful framework that is used widely in pen-testing. ...

  6. HDU4527+BFS

    模拟BFS搜索 对于一个将要爆炸的点,可能同时由多个点引起. /* 模拟搜索过程 */ #include<stdio.h> #include<stdlib.h> #includ ...

  7. loadrunner_analysis技巧_filter和group by

    很多时候要对loadrunner的收集结果进行一些选择性的过滤,比如我们使用阶梯式增加用户的方式,在初期vu没有全部准备好的情况下,此时的曲线不能体现实际情况,所以我们可以用 filter这个工具来帮 ...

  8. 8086 cpu为什么要把段地址*16+偏移量形成物理地址呢?

    8086 cpu为什么要把段地址*16+偏移量形成物理地址呢? 这是因为,8086地址线是20位,段寄存器是16位,将段寄存器*16实际上就是向左移动4位,形成20位和8086的二十位地址线匹配. I ...

  9. android 设备唯一码的获取,Cpu号,Mac地址

    开发Android应用中,我们常常需要设备的唯一码来确定客户端. Android 中的几中方法,使用中常常不可靠 1. DEVICE_ID 假设我们确实需要用到真实设备的标识,可能就需要用到DEVIC ...

  10. 170. Two Sum III - Data structure design

    题目: Design and implement a TwoSum class. It should support the following operations: add and find. a ...