3分钟带你快速了解 Java 接口

news2024/12/23 13:17:03

我醉欲眠卿且去

明朝有意抱琴来


目录

接口的概念

定义接口 

接口格式 

接口的特性 

(1)接口不能直接创建对象

(2)接口不能用 final 修饰

(3)接口中定义的变量

(4)接口中定义的方法

接口的作用

抽象类与接口

抽象类

接口

 

 

接口的概念

在我们现实生活中接口的例子十分的常见。比如:USB接口、插座接口等等


电脑的USB口上,可以插:U盘、鼠标、键盘等等所有符合USB协议的设备

电源插座插孔上,可以插:电脑、电视机、电饭煲等等所有符合规范的设备

通过上述例子可以看出:接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。 在 Java 中,接口可以看成是:多个类的公共规范,是一种引用数据类型

定义接口 

接口格式 

定义一个接口跟定义一个类的格式差不多,只不过是将 class 关键字换成 interface 关键字

[public] interface <接口名> {
    //常量
    //抽象方法、静态方法、默认方法
}
public接口的修饰符只能是 public ,只有这样接口才能被任何包中的接口或者类访问
interface 接口的关键字
接口名定义方式跟类名一样 
常量在接口中不能声明变量,因为接口要具备三个特征,公共性、静态的、最终的

接口的特性 

我们一旦在 Java 程序中创建了接口后,接口的方法和抽象类是一样的,它的方法都是抽象的,也就是说接口不具备有实现的功能(不能被创建对象)它只是指定要做那些工作,而不管怎么去做。接口就如用户提出的需求,最后由你去扩展它的实现类

(1)接口不能直接创建对象

接口类型是一种引用类型,但是不能直接 new 接口的对象

(2)接口不能用 final 修饰

因为接口就是为了让子类实现的,如果将接口封闭了,那么接口将没有任何意义

(3)接口中定义的变量

我们现在接口中定义一个变量,我们发现编译器会提示我们进行初始化

 当我们初始化后就正常了,这是什么回事呢?

 看一下这段代码反编译后的字节码,如下图:

我们发现接口中定义的变量会在编译的时候自动加上 public static final 修饰符,这样我们在接口中便只能定义常量了 ~

(4)接口中定义的方法

接口中可以定义抽象方法、静态方法、默认方法(我们这里主要讲抽象方法)

public interface newJie {
    int a = 10;
    static void Func1(){
        System.out.println("这是一个静态方法");
    }
    
    void Func2();

    default void Func3() {
        System.out.println("这是一个默认方法");
    }
}

普通方法会默认转化成抽象方法:如下图我们给 Func2 加上方法体就报错了

在 Java 程序中,接口里的方法都是抽象的或者是公有的,在声明的时候可以省略掉关键字 public 和 abstract,因为它的方法都是编译器隐式加上的(与上文的接口中的变量一样)。当然我们添加了关键字也没有事 ~

 

接口的作用

接口不能直接使用,必须要有一个 "实现类" 来 "实现" 该接口,实现接口中的所有抽象方法

接口的格式

public  class 类名称 implements 接口名称{
 // ...
 } 

子类和父类之间是 extends 继承关系,类与接口之间是 implements 实现关系

interface Person{
    void eat();
}

class Student implements Person{
    public void eat(){
        System.out.println("吃学生餐");
    }
}

 

一个接口继承多个接口

在 Java 程序中,接口的继承与类的继承不一样。接口是支持多继承的,即一个接口可以有多个父类接口,与类的继承相似,子类接口要扩展某个父类接口,将会获得父类接口中的所有抽象方法、常量属性、等等。但一个接口继承多个父接口时,多个父接口排在 extendds 关键字之后,多个父接口之间以英文符号 “,” 隔开

interface A{
    int add();
}

interface B{
    int sub();
}

interface C{
    int mul();
}

interface D extends A,B,C{}

class E implements D{
    private int a;
    private int b;

    public E(int a, int b) {
        this.a = a;
        this.b = b;
    }

    public int add(){
        return a+b;
    }

    public int sub(){
        return a-b;
    }

    public int mul(){
        return a*b;
    }
}

public class Test {
    public static void main(String[] args) {
        E e = new E(3,4);
        System.out.println("add="+e.add());
        System.out.println("sub="+e.sub());
        System.out.println("mul="+e.mul());
    }
}

我们发现 接口D 中继承了 接口A、B、C 中所有的抽象方法,因为 E类 继承了 接口D 能实现所有的抽象方法

一个类继承多个接口

我们在继承中讲过,Java 是不支持多继承的:

错误示范

class A{
    protected int a;
}

class B{
    protected int b;
}

class C extends A,B{}

虽然 Java 中不能实现类继承多个类,但是可以一个类继承多个接口 :

public interface Father {
    void Character();
}
---------------------------------------
public interface Mother {
    void Appearance();
}
---------------------------------------
class Child1 implements Father,Mother{
    protected String Name;
    protected int Age;
    @Override
    public void Character(){
        System.out.println("勇气");
    }
    @Override
    public void Appearance(){
        System.out.println("蓝眼睛");
    }

    public Child1(String name, int age) {
        Name = name;
        Age = age;
    }

    public void PrintChild() {
        System.out.println("姓名:"+this.Name+" 年龄:"+this.Age);
    }
}

class Child2 extends Child1{
    public Child2(String name, int age) {
        super(name, age);
    }
    @Override
    public void Character(){
        System.out.println("帅气");
    }
    @Override
    public void Appearance(){
        System.out.println("勤快");
    }
}
---------------------------------------
public class Test {
    public static  void Character(Child1 d){
        d.Character();
    }
    public static void Appearance(Child1 d){
        d.Appearance();
    }


    public static void main(String[] args) {
        Child1 child1 = new Child1("张三",18);
        child1.PrintChild();
        System.out.println("特征:");
        child1.Appearance();
        child1.Character();
        System.out.println("---------------------------------");
        Child2 child2 = new Child2("小美",19);
        child2.PrintChild();
        System.out.println("特征:");
        child2.Appearance();
        child2.Character();
    }
}

代码虽然有点长,我们来慢慢分析一下

问题:如何描述两个孩子的不太特征?

首先一个孩子的特性可以与父母有关:

于是我们可以定义了两个接口:Father、Mother

 

 我们由第一个孩子 Child1 继承这两个接口,并实现接口中的抽象类

 这个时候第二个孩子 Child2 就不用继承这两个接口了,我们直接继承 Child1 并重写接口方法

注意:一个类实现多个接口时,每个接口中的抽象方法都要实现,否则类必须设置为抽象类

错误示范:

interface A{
    void Func1();
    void Func2();
}

class B implements A{
    public void Func1(){
        System.out.println("B");
    }
}

 

如果你此时不想实现,你可以将该类定义为抽象类,从而来避免这个错误

一个类只能继承一个类,但是一个类可以继承多个接口。这在编写程序时解决了一个类要具备多方面的特征 ~

抽象类与接口

抽象类

通过关键字 abstract 定义的类叫做抽象类。在 Java 中所有的对象都是通过类来描述的;但反过来,并不是所有的类都是用来描述对象的,抽象类就是其中的一种

这里展示一下什么叫抽象类: 

abstract class C{
    abstract void Func();
    public void Func1(){
        System.out.println("C");
    }
}

我们知道抽象类是至少有一个抽象方法的类叫做抽象类,这也意味着抽象类中存在不是抽象方法的方法。这样抽象类就不能算作是纯粹的接口,而是介于普通类与接口之间。

接口

是一个抽象类型,是抽象方法的集合;接口通过关键字 interface 来定义。接口与抽象类的不同之处在于:

接口中的成员变量隐式为 static final,但抽象类不是的
一个类可以实现多个接口,但只能继承一个抽象类
抽象类中可以存在有方法的方法,而接口中(除了静态方法、默认方法这些特殊方法)就只有抽象方法

接口是隐式抽象的,所以声明时没有必要使用 abstract 关键字

接口中的方法都是隐式 public 的

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

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

相关文章

Visual Studio Installer 2022 安装提示正在提取文件 进度条不动 0B每秒

Visual Studio Installer 稍等片刻...正在提取文件 进度条不动 0B每秒 一段时间后提示 循环下载安装文件 无法下载安装文件。请检查Internet 连接&#xff0c;然后重试 打开vs2017 或者vs2019或者vs2022的安装程序(visual studio installer)时&#xff0c;下载进度条不动&…

【C++】认识C++(前言)

&#x1f984;个人主页:小米里的大麦-CSDN博客 &#x1f38f;所属专栏:C_小米里的大麦的博客-CSDN博客 &#x1f381;代码托管:C: 探索C编程精髓&#xff0c;打造高效代码仓库 (gitee.com) ⚙️操作环境:Visual Studio 2022 目录 一、本节概述 二、什么是C 三、C发展史 四…

为了准确计算延迟退休时间,我做了一个退休年龄计算器

延迟退休计算方法 原本退休分为三种情况&#xff0c;男性&#xff0c;女工人&#xff0c;女干部 男性&#xff1a;退休年龄为60岁。女干部&#xff1a;退休年龄为55岁。女工人&#xff1a;退休年龄为50岁。 现在延迟以后&#xff08;根据2024年9月13日公布的规则&#xff09…

武汉墨家人俱乐部

这里主要是墨家人聊科技的俱乐部&#xff0c;想来的在评论区报名吧&#xff01; 这里有VR 各种AI软件 绘图 炼丹

半导体AI硬件基础设施发展洞察

2024 半导体分析洞察&#xff1a;AI 硬件基础设施篇 一、引言随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;AI 硬件基础设施在整个 AI 生态系统中的地位日益凸显。半导体作为 AI 硬件基础设施的核心组成部分&#xff0c;正面临着前所未有的机遇和挑战。2…

作图神器!AI 免抠图生成工具,告别素材烦恼

在设计的道路上&#xff0c;相信大家都遇到过这样令人头疼的问题&#xff1a;好不容易找到合适的素材&#xff0c;结果下载的时候提示需要付费&#xff0c;更悲催的是&#xff0c;即使花钱下载了还有可能面临侵权风险。曾经的我也深陷这样的困境&#xff0c;直到我发现了一个超…

java重点学习-集合(Map)

七 集合&#xff08;Map&#xff09; 7.8 什么是二叉树 1.什么是二叉树 每个节点最多有两个“叉”&#xff0c;分别是左子节点和右子节点。不要求每个节点都有两个子节点&#xff0c;有的节点只有左子节点&#xff0c;有的节点只有右子节点。二叉树每个节点的左子树和右子树也…

红帽7—tomcat的部署方法

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和 并发访问用户不是很多的场合下被普遍使用&#xff0c;Tomcat 具有处理HTML页面的功能&#xff0c;它还是一个Servlet和 JSP容器 一&#xff1a;安装 Tomcat …

中国将越南语集中在哪里?怎样更好的提高越南语口语能力?

中国与越南接壤&#xff0c;两国之间有着密切的文化交流。在中国&#xff0c;学习越南语的教育资源主要集中在一些大学的语言学院、专业的外语培训机构以及与越南有较多交流的边境地区&#xff0c;如广西壮族自治区和云南省。这些地区由于地理位置接近越南&#xff0c;因此越南…

Social Network Influence Maximization Based on Graph Attention Mechanisms

摘要 社交网络中的关键节点对整个网络具有重要的影响力&#xff0c;而社交网络中的一些节点可能位于网络的中心&#xff0c;而另一些节点则可能位于网络的边缘&#xff0c;传统的影响力最大化算法忽略了这种不平衡。通过忽略位于网络边缘但连接到中心的节点来导致信息的传播。为…

openai最新模型o1全面解读

OpenAI发布o1模型 1.1 o1模型的命名背景 在人工智能的浩瀚星空中&#xff0c;每一次新模型的发布都像是一颗新星的诞生&#xff0c;而OpenAI最新发布的o1模型&#xff0c;无疑是这星空中的璀璨新星。那么&#xff0c;这个神秘的“o1”究竟有何深意呢&#xff1f; 首先&#x…

HT760 2x30W1²S Input, Inductor Free, Stereo Class D Amplifier

FEATURE Power supply: -PVDD:4.5V-22V: -DVDD: 3.3V "Audio Performance -BTL,2x33W(PVDD22V,RL8Ω THDN10%) -PBTL, 50W(PVDD22V, RL4Ω,THDN1%) -THDN0.05%(PVDD12V,RL4Ω,PO1W) -Noise: 100uV(Gain 19dBV, A weighted) Low Quiescent Current -12mA at PVDD 12V, no…

单个 java 虚拟机 生产者消费者

一、通过 java.lang.Object#wait()&#xff0c;java.lang.Object#notify&#xff0c;java.lang.Object#notifyAll来实现 生产者&#xff0c;消费者 public abstract class Goods {protected String type;protected String goodName;protected int number;public abstract …

redis高级教程

一 关系型数据库和 NoSQL 数据库 数据库主要分为两大类&#xff1a;关系型数据库与 NoSQL 数据库 关系型数据库 &#xff0c;是建立在关系模型基础上的数据库&#xff0c;其借助于集合代数等数学概念和方法来处理数据库中的数据主流的 MySQL 、 Oracle 、 MS SQL Server 和 D…

基于SpringBoot+Vue+MySQL的美术馆管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着文化艺术产业的蓬勃发展&#xff0c;美术馆作为展示与传播艺术的重要场所&#xff0c;其管理工作变得日益复杂。为了提升美术馆的运营效率、优化参观体验并加强艺术品管理&#xff0c;我们开发了基于SpringBootVueMySQL的美…

树莓派!干农活!

农作物种植是一个需要精准操作的行业&#xff0c;而农业的长期趋势是朝着机械化方向发展。Directed Machines公司的土地护理机器人&#xff08;Land Care Robot&#xff09;&#xff0c;基于Raspberry Pi4和RP2040构建&#xff0c;是解放稀缺人力资本的一种经济高效方式。 Dir…

墨西哥海外仓市场如何?如何选择墨西哥海外仓系统?

随着全球电商市场的迅猛发展&#xff0c;墨西哥作为拉美地区的重要市场&#xff0c;其电商增速在2023年高达24.6%&#xff0c;位居世界第一&#xff0c;这一数据无疑展示了墨西哥电商市场的巨大潜力和繁荣景象。 作为拉美地区最大的电商平台&#xff0c;美客多在墨西哥市场的扩…

iPhone 16分辨率,屏幕尺寸,PPI 详细数据对比 iPhone 16 Plus、iPhone 16 Pro、iPhone 16 Pro Max

史上最全iPhone 机型分辨率&#xff0c;屏幕尺寸&#xff0c;PPI详细数据&#xff01;已更新到iPhone 16系列&#xff01; 点击放大查看高清图 &#xff01;

传承中华文脉·弘扬北疆文化“四季内蒙古演出季”区内外文艺院团交流演出活动即将启动

为推进“北疆文化”品牌建设&#xff0c;由内蒙古自治区文化和旅游厅、呼和浩特市人民政府主办&#xff0c;呼和浩特市文化旅游广电局承办的传承中华文脉弘扬北疆文化——“四季内蒙古演出季”区内外文艺院团交流演出活动将于9月14日至11月期间在呼和浩特市举办。 传承中华文脉…