java8改进的接口

GmSSL国密双证书实战:从生成到Nginx配置全流程 本文详细介绍了使用GmSSL工具生成国密双证书(签名证书与加密证书)并配置Nginx支持国密HTTPS(TLCP协议)的全流程。内容涵盖环境准备、自签CA创建、服务器双证书生成、Nginx单向/双向认证配置以及兼容性处理,为部署符合国密标准的HTTPS服务提供实战指南。 阅读详情

java8对接口进行了改进,允许在接口中定义默认方法,默认方法可以提供方法实现。

5.6.1 接口的概念

类是一种具体实现类,而接口定义了一种规范,接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不关心这些类里方法的实现细节,它只规定这批类里必须提供某些方法,提供这些方法的类就可满足实际需要。
接口是从多个类中抽象出来的规范,接口不提供任何实现。接口体现的是规范和实现分离的设计哲学。

5.6.2 java中接口的定义

示例:[修饰符]interface 接口名 extends 父接口1,父接口2…{ }

接口名通常能够使用形容词
不管是否使用public static final修饰符,接口里的成员变量总是使用这三个修饰符来修饰。

接口里定义的内部类、内部接口、内部枚举默认都采用public static 两个修饰符,系统会自动使用public static来对他们进行修饰
Output.java

package code;
public interface Output{
    //接口里定义的成员变量只能是常量
    int MAX_CACHE_LINE = 50;
    //接口里定义的普通方法只能是public的抽象方法
    void out();
    void getDate(String msg);
    //在接口中定义的默认方法,需要使用default修饰
    default void print(String ... msgs){
        for(String msg : msgs){
            System.out.println(msg);
        }
    }
    //在接口中定义的默认方法,需要使用default修饰
    default void test(){
        System.out.println("默认的test()方法");
    }
    //在接口中定义类方法,需要使用static修饰
    static String staticTest(){
        return "接口里的类方法";
    }
}

default与访问控制符的default不同

java8允许在接口中定义默认方法,默认方法必须使用default修饰,该方法不能使用static修饰,默认方法会自动使用public修饰(必须使用)。由于默认方法并没有static修饰,因此不能直接使用接口来调用默认方法,需要使用接口的实现类的实例来调用这些默认方法。
在接口中定义类方法,必须使用static修饰,不能使用default修饰,而且自动为类添加public(必须使用)。类方法可以直接使用接口来调用

package code;
public class OutputFieldTest{
    public static void main(String[]args){
        System.out.println(code.Output.MAX_CACHE_LINE);
        //code.Output.MAX_CACHE_LINE = 20;
        System.out.println(code.Output.staticTest());
    }
}

接口里的成员变量默认是使用public static final修饰的,不同包下也可以通过接口来访问接口里的成员变量。

5.6.3 接口的继承

接口支持多继承,

package code;
interface interfaceA{
    int PROP_A = 5;
    void testA();
}
interface interfaceB{
    int PROP_B = 6;
    void testB();
}
interface interfaceC extends interfaceA,interfaceB{
    int PROP_C = 7;
    void testC();
}
public class InterfaceExtendsTest{
    public static void main(String []args){
        System.out.println(interfaceC.PROP_A);
        System.out.println(interfaceC.PROP_B);
        System.out.println(interfaceC.PROP_C);
    }
}

5
6
7

5.6.4 使用接口

归纳:接口有如下用途:

  • 定义变量,也可用于进行强制类型转换
  • 调用接口中定义的常量
  • 被其他类实现

示例:[修饰符]class 类名 extends 父类 implements 接口1,接口2…{ 类体部分}

implements必须放在extends部分之后
一个类实现了一个或多个接口后,这个类必须完全实现这些接口里所定义的全部抽象方法(也就是重写这些抽象方法),否则将保留从父接口那里继承到的抽象方法, 该类也必须定义成抽象类。

Printer.java

package code;
interface Product{
    int getProduceTime();
}
public class Printer implements Output,Product{
    private String[] printData = new String[MAX_CACHE_LINE];
    private int dataNum = 0;
    public void out(){
        while(dataNum > 0){
            System.out.println("打印机打印:" + printData[0]);
            System.arraycopy(printData,1,printData,0 ,1);
            --dataNum;
        }
    }
    public void getData(String msg){
        if(dataNum >= MAX_CACHE_LINE){
            System.out.println("输出队列已满,添加失败");

        }
        else{
            printData[dataNum++] = msg;
        }
    }
    public int getProduceTime(){
        return 45;
    }
    public static void main(String[]args){
        Output o = new Printer();
        o.getData("轻量级JavaEE企业应用实战");
        o.getData("疯狂Java讲义");
        o.out();
        o.getData("疯狂Android讲义");
        o.getData("疯狂Ajax讲义");
        o.out();
        o.print("孙悟空","猪八戒","白骨精");
        o.test();
        Product p = new Printer();
        System.out.println(p.getProduceTime());
        Object obj = p ;
    }
}

打印机打印:轻量级JavaEE企业应用实战
打印机打印:疯狂Java讲义
打印机打印:疯狂Android讲义
打印机打印:疯狂Ajax讲义
孙悟空
猪八戒
白骨精
默认的test()方法
45

上面程序看出:Printer类实现了Output接口和Product接口,因此Printer对象既可直接赋给Output变量,也可直接赋给Product变量,仿佛Printer类既是Output类的子类,也是Product类的子类,这就是java提供的模拟多继承

Printer实现Output接口,即可获得Output接口中定义的print()和test()两个默认方法,因此Printer实例可以直接调用这两个默认的方法。

接口不能显式继承类,但所有接口类型的引用变量都可以直接赋给Object类型的引用变量。

5.6.5 接口和抽象类

共同特征:

  • 都不能被实例化,都位于继承树的顶端,用于被实现和继承
  • 都可以包含抽象方法,实现类和接口必须实现这些抽象方法
    差别:

接口类似于整个系统的“总纲”,制定了系统各模块应该遵循的标准,因此一个系统中的接口不应该经常改变,一旦接口被改变,对整个系统甚至其他系统的影响都是辐射式的,导致大部分类都需要重新改写。

抽象类所体现的是模块式的设计,它作为多个子类的抽象父类,可以被当成系统实现过程中的中间产品。这个中间产品已经实现了系统的部分功能(那些已经提供实现的方法),但是需要完善。

区 别接口抽象类
1只能包含抽象方法和默认方法,不能为普通方法提供方法的实现完全可以包含普通方法
2不能定义静态方法可以定义静态方法
3只能定义静态变量,不能定义普通成员变量既可以定义普通成员变量,也可以定义静态变量
4不包含构造器可以包含构造器,抽象类的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作
5不能包含初始化块完全可以包含初始化块
6一个类可以直接实现多个接口,通过实现多个接口可以弥补Java单继承的不足一个类最多只能有一个直接父类,包括抽象类
别再凭感觉选电容了!手把手教你计算电机控制器里的母线电容(附Excel计算工具) 本文详细解析了电机控制器中母线电容的选型方法,从理论计算到工程实践,帮助工程师避免常见误区。通过精确计算纹波电压、电容容量等关键参数,并结合薄膜电容与电解电容的性能对比,提供实用的选型建议。附带的Excel计算工具可快速完成参数计算,适用于工业伺服驱动电动车电机控制器设计。 阅读详情

相关推荐

[运动规划算法]基于飞行走廊的轨迹优化

文章目录简介一、介绍二、原理飞行走廊生成三、项目演示参考 简介 Btraj是一个在线的四旋翼无人机的运动规划框架,主要用于未知环境中的自主导航。基于机载状态估计环境感知,采用基于快速行进(FM *)的路径搜索方法,从基于构建的欧氏距离场(ESDF)中寻找路径,以实现更好的时间分配。通过对环境进行膨胀生成四旋翼无人机的飞行飞行走廊。使用伯恩斯坦多项式将轨迹表示为分段Bezier曲线,并将整个轨迹生成问题转换成凸问题。通过使用Bezier曲线,可以确保轨迹的安全性高阶动力学可行性,可以将轨迹完全限制在安全

xiewf的博客 8031

java1.8--改进接口

关于接口,每天的编码都在写,就不多说了。这里对比下接口抽象类,类3者的关系: 1),接口是一种规范,就是告诉外界这个东东可以做什么。 2),抽象类是一种模板,就是告诉外界这个东西的一部分公共功能。 3),类上面的接口抽象类最大的区别就是类可以维护状态信息。 在以前的接口中 1,没有构造方法,不能实例化 2,接口只能继承接口,不能继承类 3,接口里没有普通方法...

weixin_33730836的博客 133

SAP-RPT-1 深度解读:面向企业表格数据的 rapid one

摘要: SAP在TechEd 2025大会上推出面向企业结构化数据的SAP-RPT-1(Relational Pretrained Transformer),旨在通过in-context learning直接预测表格数据中的缺失值,无需传统机器学习流程。与LLM不同,RPT专为业务表格设计,支持实时预测(如交货延迟、回款风险等)。提供Small(高吞吐)、Large(高精度)开源版本,用户可通过无代码Playground(上传CSV并用[PREDICT]标记目标列)或Python API快速验证。典型场景

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 209

java接口成员变量方法默认修饰符

java的interface中,成员变量的默认修饰符为:public static final 所以我们在interface中定义成员变量的时候,可以 1:public static final String name = "张三"; 2:String name = "张三"; 以上两种都可以,老司机一般都是第二种。既然是静态最终的变量,也就意味着在外面访问的时候不能修改这个成员变量的值。...

weixin_30664051的博客 495

java8新特性(简述十大新特性)

你真的开始用JDK8了吗?如果你没有用上一些新特性,请别说自己使用了Java8Java 8可谓是自Java 5以来最具革命性的版本了,她在语言、编译器、类库、开发工具以及Java虚拟机等方面都带来了不少新特性。我们来一一回顾一下这些特性。

ywl470812087的博客 3634

java8改进接口(一)

1.接口里不能包含普通方法,接口里的所以方法都是抽象方法。Java8接口进行了改进,允许在接口中定义默认方法,默认方法可以提供方法实现(默认方法 -default。同一包中可见)。 2.类定义不同,接口不再使用class关键字,而是interface关键字定义。 1)修饰符可以是public或者省略,如果省略,默认采用包权限访问修饰符(default)。 2)一个接口可以有多个直接父类接

Strive_penniless的博客 712

java8 改进_Java 8中的改进接口

Java 8 允许在接口中定义默认方法.默认方法必须使用 default 修饰,该方法不能使用 static 修饰,无论程序是否指定,默认方法总是使用 public 修饰.如果开发者没有指定 public ,系统会自动为默认方法添加 public 修饰符.由于默认方法并没有 static 修饰,因此不能直接使用接口来调用默认方法,需要使用接口的实现类的实例来调用这些默认方法.Java 8 允许在接...

weixin_35773019的博客 201

Java 8中关于接口改进

Java 8中关于接口改进 1.概述 Java 8中,你可以为接口添加静态方法默认方法。从技术角度来说,这是完 全合法的,只是它看起来违反了接口作为一个抽象定义的理念。 静态方法:使用 static 关键字修饰。可以通过接口直接调用静态方法,并执行 其方法体。我们经常在相互一起使用的类中使用静态方法。你可以在标准库中 找到像Collection/Collections或者Path/Paths这样成对的接口类。 默认方法:默认方法使用 default 关键字修饰。可以通过实现类对象来调用。 我们在已有的

xiaotai1234的博客 360

java8 接口 变量_Java 8 新特性之 接口改进Lambdas

测试环境$ java -versionjava version "1.8.0-ea"Java(TM) SE Runtime Environment (build 1.8.0-ea-b106)Java HotSpot(TM) 64-Bit Server VM (build 25.0-b48, mixed mode)IntelliJ IDEA 12.1.4接口改进以前Java接口里只能声明方法定义...

weixin_35338559的博客 441

java8改进接口

java8改进接口抽象类是从多个类中抽象出来的模板,如果将这种抽象进行更彻底,可以提炼出来一种更加特殊的“抽象类”–接口接口里不能包含普通方法,接口里的所有方法都是抽象方法,java8接口进行了改进,允许在接口中定义默认方法,默认方法可以定义方法实现。—————————————————————————————————————————————————————— java8接口的定义:

zlz18225318697的博客 331

Java 8/1.8中关于接口改进

Java 8/1.8中关于接口改进: 除了定义全局常量抽象方法之外,还可以定义静态方法、默认方法 Java8中,你可以为接口添加静态方法默认方法。从技术角度来说,这是完全合法的,只是它看起来违反了接口作为一个抽象定义的理念。 静态方法:使用static关键字修饰。可以通过接口直接调用静态方法,并执行其方法体。我们经常在相互一起使用的类中使用静态方法。你可以在标准库中找到像Collection/Collections或者Path/Paths这样成对的接口类 默认方法:默认方法使用default关键字

飞奔的五花肉博客 280

Java 8 改进接口

接口是一种抽象的更彻底的抽象类接口里的所有方法都是抽象方法。 本文包含如下: 接口的概念 Java 8接口的定义 接口的继承 使用接口 接口抽象类 面向接口编程 1. 接口的概念 ...

黑白灰的博客 509

Java 8 改进接口 抽象类 枚举类

文章目录1. 定义接口的基本语法:2. Java 初始化块3. 抽象方法抽象类4. 枚举类4. 1 枚举类的成员变量,方法构造器4.2 实现接口的枚举类4.3 包含抽象方法的枚举类5. 参考书籍 1. 定义接口的基本语法: [修饰符] interface 接口名 extends 父接口1, 父接口2, ... { 零个到多个常量的定义... 零个到多个抽象方法定义... 零个到多个内部类,接口,枚举定义... 零个到多个默认方法或类方法定义... } 详细说明: 修饰符可以是public

weixin_44715384的博客 632

【第六章 接口接口改进Java8)、内部类】

第六章 接口接口改进Java8)、内部类

qq_43742813的博客 292

Java 8 新特性之 接口改进Lambdas

  本文首先发表在 码蜂笔记:http://coderbee.net/index.php/java/20130914/467    测试环境 $ java -version java version "1.8.0-ea" Java(TM) SE Runtime Environment (build 1.8.0-ea-b106) Java HotSpot(TM) 64-Bit Ser...

Liuwenhao866595的专栏 242

Java8改进接口

今天复习了一下,搞得真是焦头烂额!于是鼓起勇气,总结一下,以备日后使用。 接口:是一种公共的行为规范,这些行为是与外部交流的通道。 最主要还是要记住,接口里有什么,怎么用? 首先Java 8 中定义接口是这样的: 一、 【修饰符】 interface 接口名  extends 父接口1,父接口2。。。 {          零个到多个常量(静态常量)的定义:这种常量默认被

行路者 441

JAVA 【JDK8中对接口改进

Java 8增加了两个新的概念在接口声明的时候:默认静态方法。默认方法允许我们在接口里添加新的方法,而不会破坏实现这个接口的已有类的兼容性,也就是说不会强迫实现接口的类实现默认方法。静态方法可以直接当做工具方法使用,与普通类的静态方法使用一样。默认方法抽象方法的区别是抽象方法必须要被实现,默认方法不是。

m0_66894486的博客 335

java8改进接口(二)

1.接口主要有如下用途: 1)定义变量,也可用于进行强制类型转换   ① 2)调用接口中定义的常量 3)被其他类实现 2.一个类可以实现一个或多个接口,实现使用implements关键字。注:一个类实现了接口以后,这个类必须实现接口里的全部抽象方法,否则,这个类就变为了抽象类。 public interface Output{ int MAX_CACHE_LINE = 2; //

Strive_penniless的博客 543

6-6面向对象编程(下)----接口(interface)(4)Java8中关于接口改进

Java 8中关于接口改进 1.Java 8中,你可以为接口添加静态方法默认方法。从技术角度来说,这是完全合法的,只是它看起来违反了接口作为一个抽象定义的理念。 2.静态方法:使用 static 关键字修饰。可以通过接口直接调用静态方法,并执行其方法体。我们经常在相互一起使用的类中使用静态方法。你可以在标准库中找到像Collection/Collections或者Path/Paths这样成对的接口类。 3.默认方法:默认方法使用 default 关键字修饰。可以通过实现类对象来调用。我们在已有的接口

wp_886的博客 138

Java 8全面解析

http://www.infoq.com/cn/news/2013/08/everything-about-java-8/       TechEmpower是位于加利福尼亚州埃尔塞贡多的一家定制应用开发公司,该公司发表了一篇题为“Java 8全面解析”的博客文章。该博客文章全面概括了开发者在即将到来的Java 8中所要面对的变化。下面的内容快速概括了该博客文章中的信息。如果想查看所有的...

iteye_4972的博客 79
上一篇: 抽象类
下一篇: 内部类
CXD_zy
博客等级 码龄13年 2粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值