接口

学习完框架之后,整合SSM过程中对于接口的认识加深了许多。根据《java核心技术》这本书进一步研究了一下。

1.概念

java核心技术是这样说的:“在Java程序设计中,接口不是类,而是对希望符合这个接口的类的一组需求”。

  • 首先:接口不是类;
  • 其次:接口是符合这个接口的类的一组需求;

第二点的意思就是说接口需要有一个实现类对它进行实现;

2.具体实现

  • 通过源码研究一下
  1. public interface Comparable<T> {
  2. public int compareTo(T o);
  3. }
    • 接口就是对需求的一个展示,谁使用谁就需要去重写一个方法;
    • 接口使用“interface”关键字代替“class”关键字。
    • 实际上接口中的所有方法都是公开,接口中的方法中的public可以不用书写,但是很多人为了代码结构的完整性都会加上。
  • 实现类

  1. class Employee implements Comparable<Employee>{
  2. private String name;
  3. private double salary;
  4. public Employee(String name, double salary) {
  5. this.name = name;
  6. this.salary = salary;
  7. }
  8. public String getName() {
  9. return name;
  10. }
  11. public void setName(String name) {
  12. this.name = name;
  13. }
  14. public double getSalary() {
  15. return salary;
  16. }
  17. public void setSalary(double salary) {
  18. this.salary = salary;
  19. }
  20. @Override
  21. public String toString() {
  22. return "Employee [name=" + name + ", salary=" + salary + "]";
  23. }
  24. @Override
  25. public int compareTo(Employee o) {
  26. // TODO Auto-generated method stub
  27. /*
  28. * 按照价格排序
  29. */
  30. return Double.compare(salary, o.salary);
  31. }
  32. }
    • 1.实现类必须继承接口的方法,参数,返回值必须保持一致;
    • 2.Arrays.sort(T)这个方法很重要,T这个对象必须实现Comparable接口才能使用,因为sort方法是通过Comparable接口中的comparaTo()进行比较的,具体情况看源码;
  • 具体使用

    1. public class EmployeeSortTest {
    2. public static void main(String[] args) {
    3. var staff = new Employee[3];
    4. staff[0] = new Employee("Harry Hacker",35000);
    5. staff[1] = new Employee("Carl Cracker",75000);
    6. staff[2] = new Employee("Tony Tester",38000);
    7. Arrays.sort(staff);
    8. for(Employee e:staff) {
    9. System.out.println("name="+e.getName()+",salary="+e.getSalary());
    10. }
    11. }
    12. }

3.属性

  • 接口不是类,不能使用new 创建一个接口对象。但是:

    • 接口可以声明一个接口变量,而且可以通过一个实现类创建这个对象;

      1. Comparable x;
      2. x = new Emplyee();
  • 接口判断

    1. System.out.println(staff[2] instanceof Employee);
    2. System.out.println(staff[1] instanceof Comparable);
    • 使用”instanceof“关键字,就可以实现接口的判断;
  • 接口中不能包含实例字段,但是可以包含常量;

    1. public interface T {
    2. void so();
    3. int account= 1;
    4. }
    • 接口中的字段总是public static final;

4.继承

  • 1.虽然每个类都只有一个父类,但是可以有多个接口;

  • 2.接口也可以继承;

    1. package com.sun.day01.Com;
    2. public interface Moveable {
    3. void move(Integer x,Integer y);
    4. }
    1. package com.sun.day01.Com;
    2. public interface LeftMoveable extends Moveable {
    3. Integer move(int x,int y);
    4. }

5.接口的兼容性

  • 1.Java中的接口最初设计为抽象类型,可用于类型的多种继承。

  • 2.在Java 1.0中,接口定义只能包含两种成员:静态常量和抽象方法。

  • 3.java8之前,接口基本上没有多大变化;

  1. public interface {
  2. void so();
  3. int account= 1;
  4. }
  • 4.java8开始,接口开始发生重大变化,接口中出现了默认方法,接口中可以产生静态方法;

  • 5.Java 9以后的接口中受支持的成员有静态常量,抽象方法,默认方法,静态方法,私有方法,嵌套类,嵌套接口,嵌套枚举和嵌套批注。(还真不少以后慢慢学‘

    JAVA基础之接口的更多相关文章

    1. Java基础十--接口

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

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

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

    3. 【Java基础】接口和抽象类之间的对比

      Java 中的接口和抽象类之间的对比 一.接口 Interface,将其翻译成插座可能就更好理解了.我们通常利用接口来定义实现类的行为,当你将插座上连接笔记本的三角插头拔掉,换成微波炉插上去的时候,你 ...

    4. Java基础10 接口的继承与抽象类

      链接地址:http://www.cnblogs.com/vamei/archive/2013/03/31/2982240.html 作者:Vamei 出处:http://www.cnblogs.com ...

    5. Java基础10 接口的继承与抽象类(转载)

      接口继承 接口继承(inheritance)与类继承很类似,就是以被继承的interface为基础,增添新增的接口方法原型.比如,我们以Cup作为原interface:  interface Cup{ ...

    6. java基础(11):接口、多态

      1. 接口 1.1 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成. ...

    7. Java基础之接口与抽象类及多态、内部类

      final关键字 被其修饰的类,不能被继承. 被其修饰的方法,不能被覆盖. 被其修饰的变量,是一个常量,不能被修改,所以定义时必须初始化(和C++的const类似). 一般有final,会搭配stat ...

    8. java基础之接口(抽象类与接口的区别)

      概述 猫狗案例,我们想想狗一般就是看门,猫一般就是作为宠物了,对不.但是,现在有很多的驯养员或者是驯的,这应该属于经过特殊的培训训练出来的,对不.所以,这些额外的动作定义到动物类中就不合适,也不适合直 ...

    9. Java基础——collection接口

      一.Collection接口的定义 public interfaceCollection<E>extends iterable<E>  从接口的定义中可以发现,此接口使用了泛型 ...

    随机推荐

    1. 【2020.11.28提高组模拟】T2 序列(array)

      序列(array) 题目描述 ​给定一个长为 \(m\) 的序列 \(a\). 有一个长为 \(m\) 的序列 \(b\),需满足 \(0\leq b_i \leq n\),\(\sum_{i=1}^ ...

    2. JZOJ2020年8月10日提高组T3 玩诈欺的小杉

      JZOJ2020年8月10日提高组T3 玩诈欺的小杉 题目 Description 是这样的,在小杉的面前有一个N行M列的棋盘,棋盘上有\(N*M\)个有黑白棋的棋子(一面为黑,一面为白),一开始都是 ...

    3. 第三十九章、PyQt显示部件:OpenGL Widget部件功能简介及使用其显示图片

      专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 OpenGL Widget部件是一个Op ...

    4. 转:python提取浏览器Cookie

      在用浏览器进行网页访问时,会向网页所在的服务器发送http协议的GET或者POST等请求,在请求中除了指定所请求的方法以及URI之外,后面还跟随着一段Request Header.Request He ...

    5. HTTP响应报文应答状态码及含义

      本应答报文状态码是老猿结合多方资料收集综合后并加以老猿自己的理解进行说明的应答报文状态码,应该是最新最全解释最详尽的,供大家参考:

    6. 小齐读者拿到快手、百度、网易等 offer 的独门秘籍!

      小齐说: 这篇文章来自读者冰红茶,他刚结束了秋招,拿了很多家 offer. 和他聊完之后,我觉得他的备考思路也完全适用于美国的面试,只是分值要调整一下,但是具体每一块的内容,地球村通用.所以分享给大家 ...

    7. 第 5 篇 Scrum 冲刺博客

      每天举行会议 会议照片: 昨天已完成的工作与今天计划完成的工作及工作中遇到的困难: 成员姓名 昨天完成工作 今天计划完成的工作 工作中遇到的困难 蔡双浩 实现重设计个人界面的功能添加 实现关注,被关注 ...

    8. bootstrap table处理后台返回的数据

    9. linux c++ 内存泄漏检测工具:AddressSanitizer(ASan)

      1.介绍 AddressSanitizer(ASan),该工具为gcc自带,4.8以上版本均可以使用. 2.使用 编译的方式很简单,只需要添加 -fsanitize=address -g 即可,如 g ...

    10. java性能问题排查提效脚本工具

      在性能测试过程中,往往会出现各种各样的性能瓶颈.其中java常见瓶颈故障模型有cpu资源瓶颈:文件IO瓶颈:网络IO瓶颈:内存资源瓶颈:资源消耗不高程序本身执行慢等场景模型. 如何快速定位分析这些类型 ...