接口

学习完框架之后,整合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. Mysql-索引分析查询性能

      explain 全文只有一个关键点,那就是explain,explain 显示了MySQL如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句.简单讲,它的作用就 ...

    2. Java虚拟机之内存区域

      原创文章,转载请标明出处! 目录 一.背景 二.运行时内存区域概述 1.官方描述 2.中文翻译 3.内存区域简述 4.运行时数据区简图 5.运行时数据区详图 三.JVM线程 JVM数据区域与线程关系 ...

    3. Python中迭代循环使用比较多的range函数的作用

      range函数用于生成一个不可变的数字序列可迭代对象,类型为range,该数字序列通常用于在 for 循环中循环指定的次数. 具体可参考:<Python中与迭代相关的函数>的详细介绍 老猿 ...

    4. 第8.25节 Python风格的__getattribute__属性访问方法语法释义及使用

      一. 引言 在<第8.13节 Python类中内置方法__repr__详解>老猿介绍了在命令行方式直接输入"对象"就可以调用repr内置函数或__repr__方法查看对 ...

    5. OutputFormat---自定义输出方式

      简介 可以自定义输出的格式和文件,例如包含某字段的输出到一个指定文件,不包含某字段的输出到另一个文件. 案例 数据 www.nevesettle.com www.baidu.com www.qq.co ...

    6. 廖雪峰官网学习js 数据类型和变量

      数据类型: number 不分整数 和浮点数 字符串 用' '      "  "   表示 布尔值  true  false && 与运算符(都ture才ture ...

    7. 《深入理解计算机系统》实验三 —— Buf Lab

      这是CSAPP的第三个实验,主要让我们熟悉GDB的使用,理解程序栈帧的结构和缓冲区溢出的原理. 实验目的   本实验的目的在于加深对IA-32函数调用规则和栈结构的具体理解.实验的主要内容是对一个可执 ...

    8. 冬季里有温度的 3D 可视化智慧供热系统

      前言 随着供暖季来临,我国北方大部分省市开始陆续供热.一年一度的供暖问题被提上了日程.在我们的印象里,供热的设施不论是锅炉.管道还是暖气片,都是坚硬的钢铁.铸铁.HT 通过自主研发的强大的基于 HTM ...

    9. SpringBoot魔法堂:应用热部署实践与原理浅析

      前言 后端开发的同学想必每天都在重复经历着修改代码.执行代码编译,等待--重启Tomcat服务,等待--最后测试发现还是有bug,然后上述流程再来一遍(我听不见)

    10. 磁盘inode节点被占满的解决方法

      问题: Linux服务器,查看日志发现程序无法继续写文件,但是用df -h查看磁盘容量还有剩余. 排查思路:怀疑是机器的inode节点被占满,使用df -i查看磁盘inode节点使用情况,果然是ino ...