Java接口详解

2023-11-08

一.static静态关键字

  1. 定义变量不加static关键字:每个对象单独保存一个变量。
  2. 定义变量加static关键字:静态变量/类变量/共享变量  public static 数据类型  变量名;所有对象会共享该变量。
  3. 如果一个变量(静态变量/类变量/共享变量)或者方法(静态方法)加了static关键字,调用的时候不需要通过对象来调用,而是可以直接通过类名来调用。

1.定义变量不加static关键字,每个对象单独保存一个变量!

package com.interfaceoop;

public class Manage {
    // 主函数
    public static void main(String[] args) {
        Test t1 = new Test();
        t1.count = 10;
        Test t2 = new Test();
        t2.count = 20;
        System.out.println("t1 = " + t1.count + "   t2 = " + t2.count); // t1 = 10   t2 = 20

    }
}
// 一个文件里面只能有一个共有类/主类
class Test{
    // 定义变量不加static关键字,每个对象单独保存一个变量
    public int count;
}

2.定义变量加static关键字:静态变量/类变量/共享变量,所有对象会共享该变量!

package com.interfaceoop;

public class Manage {
    // 主函数
    public static void main(String[] args) {
        Test t1 = new Test();
        t1.count = 10; // Test.count = 10;
        Test t2 = new Test();
        t2.count = 20;//  Test.count = 20; 静态变量的值可以修改
        System.out.println("t1 = " + t1.count + "   t2 = " + t2.count); // t1 = 20   t2 = 20

    }
}
// 一个文件里面只能有一个共有类/主类
class Test{
    // 定义变量加static关键字,所有对象会共享该变量,调用不受对象的影响
    // public static 数据类型 变量名;  静态变量/类变量/共享变量
    public static int count; 
}

二.关键字final的应用场景

  • final:最后,最终,不可变的。
  • final的作用:final用于修饰类、属性和方法。
  • 被final修饰的类不可以被继承:public  final   class  类名{ };
  • 被final修饰的方法不可以被重写:public final 返回值类型  方法名(){ };
  • 被final修饰的属性值不可以被修改:public final 数据类型  属性名 = 初始值;

三.接口

对于接口的理解:

  • 简单的说,接口就是一种被规范的标准,只要符合这个标准就认为拥有了这种功能。
  • 接口的表现在于对行为的抽象。
  • 就好比插座,每个厂商生产的插座我们都可以使用,这是因为它们他们有同一个标准,这里插座就是接口。

 既然都有了类,为什么还要有接口?

  • 接口常被用作在团队开发当中
  • 接口可以规范整个开发过程
  • 接口被用来描述一种抽象。
  • 因为Java不像C++一样支持多继承,所以Java可以通过接口的多实现来弥补这个局限。
  • 接口被用来实现抽象,而抽象类也被用来实现抽象,为什么一定要用接口呢?接口和抽象类之间又有什么区别呢? 
  1. 接口是一种用interface定义的类型,而抽象类是一种用class定义的类型。   
  2. 原因是抽象类内部可能包含非final的变量,但是在接口中只有被public static final修饰的常量。
  3. 抽象方法只能存在于抽象类或者接口中,但是抽象类中却能存在非抽象方法,即有方法体的方法。
  • 定义接口:public interface 接口名{ }  
  • 在接口中只有一种访问修饰符就是public,因为接口是一种规范,规范的目的是为了公开化。
  • 接口不能实例化。 
  • 接口的结构特点:1.常量(接口中只可以定义常量,且常量必须被赋值)      2.抽象方法
  • 接口中常量默认被public static final修饰,方法默认被public static abstract修饰!
  • 接口的使用(implements):接口是一种引用数据类型,但是接口不能直接创建对象,要重新定义类实现接口,重写接口中所有的抽象方法。
  • 接口的基本使用:被类实现。
  • 实现接口:public class 子类 implements  接口1,接口2...{ }
  • 一个类实现接口,必须重写接口中的全部抽象方法,否则这个类需要定义成抽象类。
  • 接口是用来被类实现的,实现接口的类被称为实现类。实现类可以理解成所谓的子类。
  • 实现(继承)接口,要重新定义类实现接口,重写接口中所有的抽象方法,包括该接口继承的接口,即父接口它里面的抽象方法也要重写
  • 接口的特点:接口不能直接创建对象,要重新定义类实现(继承)接口,重写接口中所有的抽象方法。
  • 接口的静态方法只能接口自己调用。
  • 接口不能创建对象,方法只能过继给实现类,由实现类的对象调用。
  • 接口也可以用extends关键字去继承,但是只能继承接口,并且支持多继承。
  • 接口多继承的作用:规范合并,整合多个接口为同一个接口,便于子类实现。
  • 接口与接口的继承(extends),接口也可以用extends关键字去继承,但是它只能继承接口,它可以继承多个接口,extends多继承只是对接口而言,而类只能单继承。
  • 接口的所有属性全部都是public static final的
  • 常量与属性的区别:
  1. 访问修饰符的区别    在接口中只允许用public访问修饰符。
  2. 常量在定义的时候必须给定初始值。
  3. 常量在定义的时候全部大写,NAME_XXX,如果有多个单词,加下划线。
package com.gch.d10_interface;

/**
    声明了一个接口:体现一种规范,规范一定是公开的
 */
public interface InterfaceDemo {
    // 目标:接口中的成分特点:JDK8之前接口中只能有抽象方法和常量。
    // 1.常量:
    // 注意:由于接口体现规范思想,规范默认都是公开的,所以代码层面,public static final可以省略不写
    String SCHOOL_NAME = "程序员";
//    public static final String SCHOOL_NAME = "程序员";

    // 2.抽象方法
    // 注意:由于接口体现规范思想,规范默认都是公开的,所以代码层面,public abstract可以省略不写
    void run();
//    public abstract void run();

    void eat();
//    public abstract void eat();
}
  1. 类与类之间是extends单继承关系

  2. 接口与接口之间是extends多继承关系,一个接口可以同时继承多个接口。

  3. 类与接口之间是implements多实现关系(类实现接口) 

1.接口的结构

package com.interfaceoop;

// 定义接口:public interface 接口名
public interface Student {
    // 接口结构  接口只允许用public修饰符
    // 1.常量(接口中只可以定义常量,接口中所有的属性全部都是public static final修饰的)
    public static final String NAME = "小李";

    // 2.抽象方法(abstract写不写都行,有参数有返回值都不影响,但是不能有{})
    public abstract void study();
    public void seName(String name);
    public String getName();
}

2.接口也可以用extends关键字去继承,并且支持多继承,但是接口只能继承接口,extends多继承只是对接口而言,而类只能单继承

public interface 子接口  extends  父接口1,父接口2....{ }

package com.interfaceoop;

import java.awt.event.ActionListener;
import java.awt.event.MouseListener;

// 定义接口:public interface 接口名
// 接口也可以用extends关键字来继承,但是接口只能继承接口,并且接口支持继承多个接口
public interface Student extends ActionListener, MouseListener {
    // 接口结构  接口只允许用public修饰符
    // 1.常量(接口中只可以定义常量,接口中所有的属性全部都是public static final修饰的)
    public static final String NAME = "小李";

    // 2.抽象方法(abstract写不写都行,有参数有返回值都不影响,但是不能有{})
    public abstract void study();
    public void seName(String name);
    public String getName();
}

3.实现/继承(implements)接口要重写接口中所有的抽象方法,包括该接口继承的接口,即父接口,它里面的抽象方法也要重写!

package com.interfaceoop;

import java.awt.event.ActionListener;
import java.awt.event.MouseListener;

// 定义接口:public interface 接口名
// 接口也可以用extends关键字来继承,但是接口只能继承接口,并且接口支持继承多个接口
public interface Student extends ActionListener, MouseListener {
    // 接口结构  接口只允许用public修饰符
    // 1.常量(接口中只可以定义常量,接口中所有的属性全部都是public static final修饰的)
    public static final String NAME = "小李";

    // 2.抽象方法(abstract写不写都行,有参数有返回值都不影响,但是不能有{})
    public abstract void study();
    public void seName(String name);
    public String getName();
}
package com.interfaceoop;

import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;

// 事件处理类:实现接口的类
// 实现接口/继承接口:public class 子类 implements 接口1,接口2,....{ }
// 继承/实现接口,要重写接口中所有的抽象方法,包括该接口继承的接口,
// 即父接口它里面的抽象方法也要重写
public class ImplementsStudent implements Student{
    public void study(){}
    public void seName(String name){}
    public String getName(){return null;}

    public void actionPerformed(ActionEvent e){}

    public void mouseClicked(MouseEvent e){}
    public void mousePressed(MouseEvent e){}
    public void mouseReleased(MouseEvent e){}
    public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
}

4.实现(继承)接口的同时也可以继承类 :必须先extends继承类再实现(继承)接口

  1. 格式:public class 子类 extends 父类 implements 接口1,接口2,...{ }

  2. 类只支持单继承(即一个子类只能有一个父类),接口可以多实现
package com.interfaceoop;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;

// 事件处理类:实现接口的类
// 实现接口/继承接口:public class 子类 implements 接口1,接口2,....{ }
// 实现(继承)接口,要重写接口中所有的抽象方法,包括该接口继承的接口,即父接口它里面的抽象方法也要重写

// 实现(继承)接口的同时也可以继承类  格式: public class 子类 extends 父类 implements 接口1,接口2,...{ }
public class ImplementsStudent extends JFrame implements Student{
    public void study(){}
    public void seName(String name){}
    public String getName(){return null;}

    public void actionPerformed(ActionEvent e){}

    public void mouseClicked(MouseEvent e){}
    public void mousePressed(MouseEvent e){}
    public void mouseReleased(MouseEvent e){}
    public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java接口详解 的相关文章

  • Maven 未运行 Spring Boot 测试

    我有一个要测试的 Spring Boot REST API 我可以在 Eclipse 中手动运行测试 无需 Maven 并通过将应用程序作为 JUnit 测试运行 它运行良好并显示结果 但是mvn test正如您将在下面发现的那样 它不起作
  • Spring @PostConstruct 依赖于 @Profile

    我想在一个配置类中拥有多个 PostConstruct 带注释的方法 这些方法应该根据 Profile 进行调用 你可以想象这样的代码 Configuration public class SilentaConfiguration priv
  • 在这个 Spring MVC 展示示例中如何使用 @RequestAttribute 和 @ModelAttribute 注释?

    我对 Spring MVC 还很陌生 这段时间我正在学习Spring MVC 展示 https github com spring projects spring mvc showcase可从 STS 仪表板下载示例 我在理解此示例中如何处
  • Logback线程池

    我使用 Logback 进行日志记录 我有一个问题 我将 AsyncAppender 与 ConsoleAppender 结合使用 当应用程序启动时 它会创建具有 logback 线程名称的线程池 所有日志记录工作均由 AsyncAppen
  • CDI 对象无法使用注入的构造函数进行代理

    当尝试将参数注入 CDI bean ApplicationScoped 的构造函数时 我遇到以下问题 Caused by org jboss weld exceptions UnproxyableResolutionException WE
  • Vaadin框架播放视频

    我可以使用 Vaadin Framewotk 播放视频吗 主要思想是从本地驱动器加载 flv 或 avi 格式的视频文件 并使用 vaadin 框架在网络上播放 谢谢 Sampler中有一个示例 http demo vaadin com s
  • 如何获取JavaFX的版本号?

    如何在运行时找出我正在使用哪个版本的 JavaFX 简单的方法之一就是简单地阅读javafx properties文件位于您的 JAVA HOME jre lib目录 我现在安装了 Java 1 7 u9 与之捆绑的 JavaFX 是 v2
  • AJAX(原型/java)在执行期间获取部分状态更新

    这部分模仿了AJAX 原型 php 在脚本执行期间获取部分状态更新 https stackoverflow com questions 800997 ajax prototype php getting partial status upd
  • 为什么在java中加载JNI是在静态初始化程序中完成的?

    在许多使用 JNI 的示例中 我看到类似以下内容 class SampleClass static System loadLibrary somelib 这种特殊语法的目的是什么 为什么使用这个 而不仅仅是在类构造函数或类似的东西中 我想你
  • 如何在 TestNG 报告中包含 Log4j2 消息

    我希望在所有测试用例的 TestNG 报告中提供 Log4j2 日志记录信息 TestNG 使用一个名为 Reporter java 的特殊记录器类来跟踪日志输出并将其保存在其结果 XML 中 在 log4j 中 可以简单地创建一个路由到
  • 自 Java 7 以来 HttpServer 延迟 1 秒

    我们正在使用内部HttpServer项目中的类 用于通过 HTTP 在客户端和服务器之间交换数据 当我们切换到 Java 7 时 我们意识到结果交付存在延迟 我们可以将问题简化为以下示例 Class EchoServer创建上下文 echo
  • Java Swing 组件的命名约定(前缀)

    在 Java 中使用 Swing 进行编程时 我想到的一个问题是 它是 Swing 组件的推荐还是 官方 最常用的命名约定 前缀 例如 尽管其他人可能更喜欢其他命名约定 但这就是我当前正在使用的 JTextField 的 txt JButt
  • 错误:libXext.so.6:无法打开共享对象文件:没有这样的文件或目录[重复]

    这个问题在这里已经有答案了 运行尝试打开 ods 文件的 java 文件时出现以下错误 线程 main 中出现异常 java lang UnsatisfiedLinkError opt software jdk1 6 0 45 jre li
  • 将项目导入 Eclipse 后出现“必须重写超类方法”错误

    任何时候我必须将我的项目重新导入到 Eclipse 中 如果我重新安装了 Eclipse 或者更改了项目的位置 几乎全部我的重写方法的格式不正确 导致错误 该方法必须重写超类方法 值得注意的是 无论出于何种原因 Android 项目中方法参
  • JNA Windows 服务启动类型

    我一直在使用 JNA 并且能够使用下面的代码返回 Windows 服务的状态 即启动或停止 但我不确定如何返回服务的启动类型 我确信 JNA 之外还有其他方法 但如果可能的话我想继续使用 JNA import com sun jna imp
  • 使用相对于配置文件的路径引用 Spring 属性文件

    我正在将属性从 Spring 配置文件内部移动到单独的属性文件中 这包含在配置文件中
  • IntelliJ IDEA 中的项目语言级别是多少?

    我正在使用 Java 7 SDK 和 IntelliJ IDEA IDE java version 1 7 0 11 Java TM SE Runtime Environment build 1 7 0 11 b21 Java HotSpo
  • 如何指示 yum 安装特定版本的 OpenJDK

    我尝试安装openjdk in the redhat服务器 如何安装指定版本 我要安装的版本是 11 0 4 使用以下命令安装的版本是11 0 6 yum install java 11 openjdk devel 曾与 yum showd
  • 如何为信号量中等待的线程提供优先级?

    我使用信号量来限制访问函数的线程数量 我希望接下来要唤醒的线程应该由我将给出的某个优先级选择 而不是默认信号量唤醒它们的方式 我们怎样才能做到这一点 这是实现 class MyMathUtil2 implements Runnable do
  • Java中精确的时间测量

    Java 提供了两种获取当前时间的方法 System nanoTime and System currentTimeMillis 第一个给出的结果以纳秒为单位 但实际精度比这要差得多 许多微秒 JVM 是否已经为每台特定机器提供了最佳的价值

随机推荐

  • 华为机考108题(c++)(91-100)

    HJ91 走方格的方案数 描述 请计算n m的棋盘格子 n为横向的格子数 m为竖向的格子数 从棋盘左上角出发沿着边缘线从左上角走到右下角 总共有多少种走法 要求不能走回头路 即 只能往右和往下走 不能往左和往上走 注 沿棋盘格之间的边缘线行
  • UML 绘图关系

    1 继承 子类继承父类 2 实现 实现类实现接口 3 依赖 偶然 临时 比较弱关联 类 A 使用了类 B 如果类 B 产生变化将会影响类A 4 关联 长期的 平等的 双向的 强依赖关系 强依赖关系 5 聚合关系 关联关系特例 体现的是 整体
  • spring-mvc 乱码问题的处理

    乱码问题的处理 当处理post请求时容易出现乱码 如果不是前端页面的问题的话 我们需要加入过滤器处理 大前提 tomcat要设置好 点开对应文件 conf server xml 找到connector
  • 基于simulink的16QAM仿真模型

    16QAM部分 具体的参数以及原模型的构架 我们做了调整请自行对比原来你提供的模型 这里 我们将给出所有的仿真图 串并 仿真结果如下所示 如图 这里输入的信号为1000001000 0110001010 0111101000 串并之后得到数
  • 神州交换机DHCPv6配置

    SWA配置 CS6200 28X EI gt ena CS6200 28X EI conf CS6200 28X EI config host SWA SWA config ipv6 enable SWA config service dh
  • 人脸识别研究

    转载自 https www jianshu com p 639e3f8b7253 本篇文章十分的长 大概有2万7千字左右 一 发展史 1 人脸识别的理解 人脸识别 Face Recognition 是一种依据人的面部特征 如统计或几何特征等
  • Docker与DevOps的无敌组合,引爆你的创新潜能

    荣誉认证 51CTO博客专家博主 TOP红人 明日之星 阿里云开发者社区专家博主 技术博主 星级博主 微信公众号 iOS开发上架 本文由iOS开发上架原创 欢迎关注 点赞 收藏 留言 首发时间 2023年8月7日 坚持和努力一定能换来诗与远
  • 如何批量修改照片后缀名

    有的时候我们写博客 或者干一些别的事情 需要大量的图片资源 于是我们会花费一些时间去zhaotup 把找到的图片都存在文件夹里面 但是 我们找到的图片所对应的格式可能不是我们所想要的格式 但是 我们可能下载了很多图片 不可能一个一个的去修改
  • 我个人认为.NET总有开源的一天

    我已经从事 Net平台的开源工作9年有余 最近跟朋友的聊天让我不禁回望 Net开源的这9年 记得2004年的 Net 1 1在当时是个热门 开源被认为是对微软的巨大威胁 Steve Balmer 也极力反对任何出现的开源 那时候对 NET平
  • elasticsearch常用命令操作集合

    文章目录 1 请求命令格式 2 关闭服务 3 添加员工信息 4 检索单个员工信息 5 检索所有员工信息 6 简单查询查询last name为Smith的员工信息 全匹配 7 DSL语句查询 查询last name为Smith的员工信息 全匹
  • thinkphp3错误:syntax error, unexpected 'list' (T_LIST), expecting identifier (T_STRING)

    syntax error unexpected list T LIST expecting identifier T STRING 出现这个错误的原因是 list是php的一个函数 系统冲突了 改成别的名字就可以了
  • java 操作excel (maven)

    资料地址 http www teamdev com downloads jexcel docs JExcel PGuide html 1 pom xml文件添加
  • 构造方法、类的初始化块以及类字段的初始化顺序

    构造方法 首先 以下代码为何无法通过编译 哪儿出错了 public class Test public static void main String args Foo obj1 new Foo class Foo int value pu
  • 如何写出高质量代码——站在巨人的肩膀上

    如何写出高质量代码 站在巨人的肩膀上 高质量代码的三要素 可读性 可维护性 可变更性 可读性强 可维护性 适应软件在部署和使用中的各种情况 1 3 可变更性 因需求变化而对代码进行修改 牛顿曾经说过 如果说我看得比别人更远 那是因为我站在巨
  • 遍历Newtonsoft.Json.Linq.JObject

    JObject 遍历 引用命名空间 using Newtonsoft Json Linq JObject jObject JObject Parse ID 001 Mark Hello Word StringBuilder str new
  • C++进阶:Makefile基础用法

    文章目录 1 Makefile基本语法与执行 2 Makefile简化过程 3 Makefile生成并使用库 3 1 动态库的建立与使用 3 2 动态加载库的建立与使用 1 Makefile基本语法与执行 作用 Makefile 文件告诉
  • 光纤收发器A,B端含义解释

    最近有朋友问到 光纤收发器型号或者收发器模块上A B字母的含义是什么 今天飞畅科技的小编就来为大家介绍一下 收发器中A B端字母的真正含义 一起来看看吧 首先 光纤收发器按光纤芯数分类有2种 一种是单模双纤光纤收发器 一种是单模单纤光纤收发
  • (二叉树)二叉树的序列化与反序列化

    题目描述 序列化是将一个数据结构或者对象转换为连续的比特位的操作 进而可以将转换后的数据存储在一个文件或者内存中 同时也可以通过网络传输到另一个计算机环境 采取相反方式重构得到原数据 请设计一个算法来实现二叉树的序列化与反序列化 这里不限定
  • Highway network

    Highway Network主要解决的问题是 网络深度加深 梯度信息回流受阻造成网络训练困难的问题 假设定义一个非线性变换为 定义门函数 携带函数 对于门函数取极端的情况0 1会有 而对应的门函数使用sigmoid函数 则极端的情况不会出
  • Java接口详解

    一 static静态关键字 定义变量不加static关键字 每个对象单独保存一个变量 定义变量加static关键字 静态变量 类变量 共享变量 public static 数据类型 变量名 所有对象会共享该变量 如果一个变量 静态变量 类变