Java接口——子接口是否能直接通过子接口名调用父接口类方法

news2024/11/16 3:14:01

Java9允许在接口中定义默认方法和类方法,为接口增加了一种私有方法,也可以提供实现。

接口就是定义一组通用的方法,就像U盘,只要是USB接口大部分都可以在电脑上使用,电脑无需关心U盘内部怎么实现,只需要告诉U盘厂商需要提供USB接口和一些对接方式即可。

接口里可以包含成员变量(只能静态成员变量)、方法(抽象实例方法、类方法、默认方法或私有方法)、内部类(包括内部接口、枚举)定义。

接口里定义的是多个类的共同的公共行为规范,定义接口的成员时只能用public访问权限或不写(默认就是public)

Java9为接口新增了一种新的私有方法,私有方法可以有方法体,主要作用就是工具方法,为接口中的默认方法和类方法提供支持。私有方法既可以是类方法,也可以是实例方法。

接口中的静态常量,它们是接口相关的,属于接口本身,所以默认有public static final修饰,且接口没构造器和初始化块,因此接口定义的成员变量只能在定义时指定默认值。

这两行代码结果完全一样。

    int MAX=600;
    public static final int MAX=600;

定义一个接口:

public interface Output {
    int MAX_CACHE_LINE = 50;
    
    void out();

    void getData(String msg);

    //默认方法
    default void print(String... messages) {
        for (String message : messages) {
            System.out.println(message);
        }
    }

    static String staticTest() {
        return "接口里的类方法";
    }

    private void foo() {
        System.out.println("foo私有方法");
    }

    private static void bar() {
        System.out.println("bar私有静态方法");
    }
}

默认方法并没有static修饰,因此不能直接用接口来调用默认方法,需要用接口实现类的实例对象来调用。

接口的默认方法其实就是实例方法,但是Java早期设计初衷:接口中的实例方法不能有方法体;Java8也不能直接推倒以前的规则,因此只好定义一个所谓的“默认方法”,其实就是有方法体的实例方法。

接口的继承

接口完全支持多继承,多个父接口排在extends关键字之后

接口继承的静态方法和静态常量问题:下面是一个类的继承:

class C {
    public static int cc = 10;

    public static void c() {
        System.out.println("ccc");
    }
}

class D extends C {
    public static void main(String[] args) throws NoSuchMethodException, NoSuchFieldException {
        System.out.println(D.class.getMethod("c"));
        System.out.println(D.class.getField("cc"));
    }
}

运行结果:

D类继承了C类后可以使用D的类名调用C类的静态方法和静态常量

下面是接口的继承:

interface A {
    public static final int a = 10;

    public static void aa() {
        System.out.println("刀哥");
    }
}

interface B extends A {
    public static void main(String[] args) throws NoSuchFieldException, NoSuchMethodException {
        System.out.println(B.class.getField("a"));
        System.out.println(B.class.getMethod("aa"));
    }
}

运行结果: 

 这说明了接口的继承是不可以通过子接口的接口名直接调用父接口的静态方法,只能通过父接口(接口名.静态方法名)来调用

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/184866.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈python中@装饰器 - 附例子(含类装饰器与函数装饰器)

浅谈python中装饰器 文章目录浅谈python中装饰器关于装饰器(decorator)小总结关于(语法糖)进阶装饰器顺序装饰器 & 参数End提到的使用首先要先讲一下装饰器的概念 关于装饰器(decorator) 先来看看官方…

计算机相关专业提升学历的解决方案(硕士研究生)

文章目录1、正规全日制硕士1.1 研究生入学考试1.2 硕士毕业要求2、继续教育(非全日制)2.1 在职研究生2.2 同等学力申硕3、海外硕士3.1 海外硕士申请3.2 中外合作项目1、正规全日制硕士 1.1 研究生入学考试 1、考试报名 官方网站:国家研究生…

玩转PPT 第2节 PPT第一辅助神器iSlide操作

ppt神器 第2节 islide常用操作锦集1 一键优化1.1 统一字体1.2 统一段落1.3 统一参考线1.4 统一主题色2 设计排版2.1 快速复制图形实现矩阵布局2.2 环形布局复制2.3 环形裁剪2.4 矩阵裁剪3 设计工具3.1 对齐3.2 大小3.3 对齐到参考线3.4 选择,相当于快速组合取消等3.…

树与二叉树深度剖析(二)

一. 树表示法1.双亲表示法(1).含义在一棵树中,任意一个结点的双亲只有一个,这是由树的定义决定的。双亲表示法就是利用了树的这个性质,在存储结点信息的同时,在每个节点中附设一个指向其双亲的指针, 指向双亲在链表中的…

IMX Linux 用户手册 — 3

IMX Linux 用户手册 — 3 10.3 CAAM Job Ring后端驱动规范 CAAM作业环后端驱动(caam_jr)实现并使用作业环接口(JRI)向CAAM引擎提交来自前端驱动(caamalg, caamhash, caampkc, caamrng, caamkeyblob)的加密API服务请求。 CAAM驱动程序有几个选项,最显著的是硬件工作…

ssm宿舍水电费报修考勤管理系统的开发与实现

目 录 摘 要 I 目 录 1 第1章 概述 1 1.1 研究背景 1 1.2 研究现状 1 1.3 研究内容 2 第二章 开发技术介绍 2 2.1 系统开发平台 2 2.2 平台开发相关技术 3 2.2.1 B/S架构 3 2.2.2 mysql数据库介绍 4 2.2.3 JSP技术介绍 4 第三章 系…

如何增强企业数字敏捷性?|身份云研究院

在经济下行背景中,企业面临数字化转型和降本增效两大课题,解决这两个问题的核心是增强企业数字敏捷性。比起从业务侧逐个优化,决策者们更应从数字化基础设施入手,搭好底层数字化架构来保障企业在不断变化的技术和法规中获得适应性…

随时随地查看远程试验数据与记录——IPEhub2与IPEmotion APP

一 背景 在工况恶劣、空间狭小的试验场景或工程机械领域中,不但试验人员在试验环境中对自身安全没有保障,而且试验过程也会受到影响,如高温高压测试、工程机械液压系统测试等。对此,结合IPEhub2与IPEmotion APP,既可保…

linux journalctl使用详解

1.概述 ​ journalctl 用来查询 systemd-journald 服务收集到的日志。systemd-journald 服务是 systemd init 系统提供的收集系统日志的服务。journalctl通常用来查询systemd管理的Unit的日志信息。 2.使用方法 $ man journalctl $ journalctl --help 常用方法 $ journalctl …

【可解释性机器学习】解释基于Scikit-learn进行文本分类的pipeline及结果

使用Scikit-learn进行文本分类pipeline1. 基线模型2. 基线模型,改进的数据3. Pipeline改进4. 基于字符的pipeline5. 调试HashingVectorizer参考资料scikit-learn文档提供了一个很好的文本分类教程。确保先阅读它。 本文中,我们将做类似的事情&#xff0c…

学习笔记-----通道

加粗样式# system v共享内存 进程通信的前提条件是:让不同进程看见同一份资源。 共享内存:其实就是进程获取共享区里面的地址,该地址为物理内存中某块我所需要资源的地址(该内存是创建的共享内存处在共享区里),地址通过页表映射到…

项目工时管理遇难题?看看这套工时管理系统解决方案

随着社会化大生产的发展以及市场竞争的日趋激烈,现代企业的规模在不断扩大。对于项目企业来说,人力资源的成本就是项目的主要成本,而工时是项目中人工成本的重要依据,因此,管理好员工工时是项目管理过程中最重要的任务…

计算机图形学 第3章 圆的扫描转换-第三章结束

书用的是 书名:计算机图形学基础教程(VisualC版)(第二版) 定价:44.5元 作者:孔令德 出版社:清华大学出版社 出版日期:2013-03-01 ISBN:9787302297529 目录习题3(续&#…

【数据结构】8.3 交换排序

文章目录1. 冒泡排序冒泡排序算法冒泡排序算法分析2. 快速排序快速排序算法快速排序算法分析基本思想 每两个元素之间互相比较,如果发现大小关系相反,则将他们交换过来,直到所有记录都排好序为止。假设希望是从小到大来排序,结果…

Nginx-反向代理配置学习总结

Nginx-反向代理配置学习总结 正向代理:指的是通过代理服务器 代理浏览器/客户端去重定向请求访问到目标服务器 的一种代理服务,正向代理服务的特点是代理服务器 代理的对象是浏览器/客户端,也就是对于目标服务器 来说浏览器/客户端是隐藏的。…

文件的IO

一、文件的定义狭隘的文件:指你的硬盘上的文件和目录.广义的文件:泛指计算机中的硬件资源,操作系统中,把很多硬件设备和软件资源都抽象成了文件,按照文件的形式统一管理.比如网卡,操作系统也是把网卡抽象成了文件资源,所以说操作网卡其实和操作文件的方式是基本一样的.而我们本…

初识流计算框架Spark

Spark简介 Spark最初由美国加州伯克利大学(UCBerkeley)的AMP(Algorithms, Machines and People)实验室于2009年开发,是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。Sp…

一刷代码随想录——链表

1.理论基础链表节点的定义:struct ListNode {int val;ListNode* next;ListNode() : val(0), next(nullptr) {}ListNode(int x) : val(x), next(nullptr) {}ListNode(int x, ListNode* next) : val(x), next(next) {} };根据卡哥提示,由于力扣中已经给出如…

C++中拷贝构造函数、拷贝赋值运算符、析构函数、移动构造函数、移动赋值运算符(三/五法则)

1、介绍 三五法则是针对C中类的成员和类对象的操作函数。 三法则是指:拷贝构造函数、拷贝赋值运算符、析构函数。 五法则是在三法则的基础上增加了:移动构造函数、移动赋值运算符。 2、拷贝构造函数 定义:如果构造函数的第一个参数是自身…

Postman前置脚本

位置:作用:调用脚本之前需要执行的代码片段一、产生随机数字生成0-1之间的随机数,包括0,不包括1;var random Math.random();console.log("随机数",random);获取最小值到最大值之前的整数随机数function Get…