接口

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

1.概念

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

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

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

2.具体实现

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

class Employee implements Comparable<Employee>{
private String name;
private double salary; public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Employee [name=" + name + ", salary=" + salary + "]";
}
@Override
public int compareTo(Employee o) {
// TODO Auto-generated method stub
/*
* 按照价格排序
*/
return Double.compare(salary, o.salary);
}
}
    • 1.实现类必须继承接口的方法,参数,返回值必须保持一致;
    • 2.Arrays.sort(T)这个方法很重要,T这个对象必须实现Comparable接口才能使用,因为sort方法是通过Comparable接口中的comparaTo()进行比较的,具体情况看源码;
  • 具体使用

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

3.属性

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

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

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

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

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

4.继承

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

  • 2.接口也可以继承;

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

5.接口的兼容性

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

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

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

public interface {
void so();
int account= 1;
}
  • 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. spring框架使用c3po链接数据库

      编辑工具:idea 1.配置pom.xml文件(创建模板时软件自动创建) 导入spring的核心架包 全部架包官网:https://mvnrepository.com/ 1 <dependenc ...

    2. 老猿学5G扫盲贴:3GPP规范文档命名规则及同系列文档阅读指南

      专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在学习5G规范过程中,有些内容把握不定的时候,有时 ...

    3. 第8.19节 使用__doc__访问Python文档字符串(DocStrings )

      __doc__特殊变量用于查看类.函数.模块的帮助信息,这些帮助信息存放在文档字符串中. 一. 关于文档字符串 关于文档字符串前面很多章节提到过,DocStrings 文档字符串用于程序的文档说明,并 ...

    4. PyQt(Python+Qt)学习随笔:QScrollArea滚动区域的scrollAreaWidgetContents、widget及setWidget等相关概念解释

      老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在Designer中设计将一个lable放到滚动区域上,使用PyUIC生成代码后,可以看到除了QSc ...

    5. CTFHub Web题学习笔记(SQL注入题解writeup)

      Web题下的SQL注入 1,整数型注入 使用burpsuite,?id=1%20and%201=1 id=1的数据依旧出现,证明存在整数型注入 常规做法,查看字段数,回显位置 ?id=1%20orde ...

    6. MySQL存储引擎:MyISAM和InnoDB的区别

      MyISAM和InnoDB的区别 定义 InnoDB:MySQL默认的事务型引擎,也是最重要和使用最广泛的存储引擎.它被设计成为大量的短期事务,短期事务大部分情况下是正常提交的,很少被回滚.InnoD ...

    7. 题解-[WC2011]最大XOR和路径

      [WC2011]最大XOR和路径 给一个 \(n\) 个点 \(m\) 条边(权值为 \(d_i\))的无向有权图,可能有重边和子环.可以多次经过一条边,求 \(1\to n\) 的路径的最大边权异或 ...

    8. Linux 开机启动程序的顺序

      1.加载BISO的硬件信息,并取得第一个开机代号 2.读取第一个开机装置的mbr的boot loader的信息 3.加载kernel操作系统核心信息,开始解压缩,并驱动所有硬件装置 4.kernel执 ...

    9. 【Django 字段和相关参数补充】

      字段类型: 1.models.AutoField 自增列=int(11) 如果没有的话,默认会生成一个名称为id的列,如果要显示的自定义一个自增列,必须将给列设置为主键primary _key=Tru ...

    10. SpringBoot集成基于tobato的fastdfs-client实现文件上传下载和删除

      1. 简介   基于tobato的fastdfs-client是一个功能完善的FastDFS客户端工具,它是在FastDFS作者YuQing发布的客户端基础上进行了大量的重构,提供了上传.下载.删除. ...