首页 > 编程语言 >JAVA接口

JAVA接口

时间:2024-08-21 20:15:53浏览次数:10  
标签:JAVA 接口 static 静态方法 抽象类 方法 public

JAVA接口

目录

1 接口定义

  • 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
  • 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
  • 除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
  • 接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
  • Java中接口存在的两个意义
    1. 用来定义规范
    2. 用来做功能的拓展

2 接口与类相似点:

  • 一个接口可以有多个方法。
  • 接口文件保存在 .java 结尾的文件中,文件名使用接口名。
  • 接口的字节码文件保存在 .class 结尾的文件中。
  • 接口相应的字节码文件必须在与包名称相匹配的目录结构中。

3 接口与类的区别:

  • 接口不能用于实例化对象。
  • 接口没有构造方法。
  • 接口中所有的方法必须是抽象方法,Java 8 之后 接口中可以使用 default 关键字修饰的非抽象方法。
  • 接口不能包含成员变量,除了 static 和 final 变量。
  • 接口不是被类继承了,而是要被类实现。
  • 接口支持多继承。

4 接口特性

  • 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
package com.fcarey.interf;

public interface InteF {
    public static final int NUM = 10;
    public abstract void hey();
}


package com.fcarey.interf;

public class InterImpl implements InteF {
    public void hey(){
        System.out.println("hey");
    }
    public void hello(){
        System.out.println("hello");
    }
}


package com.fcarey.interf;

public class Demo {
    public static void main(String[] args) {
        InterImpl inter = new InterImpl();
        inter.hey();
        inter.hello();
    }
}

5 抽象类和接口的区别

  • 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
  • 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
  • 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
  • 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

  • JDK 1.8 以后,接口里可以有静态方法和方法体了。
  • JDK 1.8 以后,接口允许包含具体实现的方法,该方法称为"默认方法",默认方法使用 default 关键字修饰。
  • JDK 1.9 以后,允许将方法定义为 private,使得某些复用的代码不会把方法暴露出去。这其实在Java 8中就埋下了伏笔:Java 8允许在接口中定义带方法体的默认方法和静态方法。这样可能就会引发一个问题:当两个默认方法或者静态方法中包含一段相同的代码实现时,程序必然考虑将这段实现代码抽取成一个共性方法,而这个共性方法是不需要让别人使用的,因此用私有给隐藏起来,这就是Java 9增加私有方法的必然性

6 接口中默认方法

  • 解决接口升级的问题
  • 注意事项
    • 默认方法不是抽象方法,所以不强制被重写。但是可以被重写,重写的时候去掉default关键字
    • public可以省略,default不能省略
    • 如果实现了多个接口,多个接口中存在相同的方法声明,子类就必须对该方法进行重写
public default 返回值类型 方法名(参数列表) {   }

7 接口中静态方法

public static 返回值类型 方法名(参数列表) {   }
  • 注意事项

    • 静态方法只能通过接口名调用,不能通过实现类名或者对象名调用

    • public可以省略,static不能省略

8 接口的多继承

public interface Hockey extends Event1, Event
  • 如果实现了多个接口,多个接口中存在相同的方法声明,子类就必须对该方法进行重写

接口的声明

接口的声明语法格式如下:

  • 接口用关键字interface修饰

    public interface 接口名 {} 
    
  • 类实现接口用implements表示

    public class 类名 implements 接口名 {}
    
  • 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。

  • 接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。

  • 接口中的方法都是公有的。

标签:JAVA,接口,static,静态方法,抽象类,方法,public
From: https://www.cnblogs.com/f-carey/p/18372388

相关文章

  • JAVA学习之异常
    一、异常的概念    在Java编程中,异常是指在程序执行过程中可能发生的错误或问题,这些问题可能会导致程序无法继续正常运行,异常可以分为两种类型:编译时异常和运行时异常。1.编译时异常是在编译阶段被检测到的异常,程序员在代码中必须显示地处理这些异常,否则无法通过编......
  • Java中static的用法
    目录1.静态变量(StaticVariables)2.静态方法(StaticMethods)3.静态代码块(StaticBlocks)4.静态内部类(StaticNestedClasses)5.执行顺序6.注意事项在Java中,static关键字有几个重要的用途,主要用于定义类的静态成员,如静态变量、静态方法和静态代码块。以下是对这些用......
  • HTTP和RPC接口的区别?
        大家在面试的过程中,经常会被问到一个问题,那就是HTTP和RPC接口的区别,接下来,就跟随小k的步伐,一起来探究一下这两个接口的区别吧!    HTTP和RPC接口是两种常见的接口通信协议,本文将介绍他们的定义,区别和相似之处,应用场景。HTTP接口HTTP接口是一种应用层通信协......
  • Java中关键字static的学习
    static关键字目录static关键字静态变量(静态成员变量)静态方法静态初始化块静态内部类静态导入在Java中,static关键字是一个非常重要的修饰符,它主要用于创建静态变量、静态方法、静态初始化块、静态内部类以及静态导入。使用static关键字的主要目的是为了实现共享,即被static修饰的......
  • 高级java每日一道面试题-2024年8月21日-框架篇[Spring篇]-使用IOC容器应该注意哪些?
    如果有遗漏,评论区告诉我进行补充面试官:使用IOC容器应该注意哪些?我回答:1.理解IOC的基本概念控制反转:在传统的编程模式中,程序会主动控制依赖关系的创建和管理。而在IoC容器中,这种控制权被反转给了容器本身。程序员只需要声明依赖关系,而由容器负责实例化和注入这些依......
  • java如何判断一个列表中是否存在大于1000的数字
    个人名片......
  • Java异常捕获与处理:深入理解与实践
    个人名片......
  • Java笔试面试题AI答之集合(1)
    文章目录1.Java集合类框架的基本接口有哪些?2.为什么Java集合类没有实现Cloneable和Serializable接口?关于Cloneable接口关于Serializable接口为什么不默认实现这些接口?3.Java中的HashMap的工作原理是什么?1.数据结构2.哈希函数3.处理哈希冲突4.动态扩容5.Java8......
  • 基于Java的志愿者管理系统设计与实现(适用于2025年毕业项目-源码+论文+部署讲解等)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.可行性分析7.系统测试7.1系统测试的目的7.2系统功能测试8.数据库表设计9.代码参考10.数据库脚本11.作者推荐项目12.为什么选择我?13.获取源......
  • 探索Kubernetes:Java微服务的8步深度指南
    ......