【Java】接口 interface

目录

 概述

示例代码:

接口成员访问特点

示例代码:


概述

什么是接口

接口就是一种公共的规范标准,只要符合规范标准,大家都可以调用。

Java 中的接口更多的体现在对行为的抽象!

1. 接口 用关键字 interface 修饰

public interface 接口名 {}

2. 类实现接口用 implements 表示

public class 类 implements 接口 {}

3. 接口不能实例化

  • 接口如何实例化呢?

        参照多态的方式,通过实现类对象实例化,这叫接口多态

  • 多态的形式:具体类多态,抽象类多态,接口多态。

4. 多态的前提:

  • 有继承(抽象类)或者实现(接口)关系;
  • 有方法重写;
  • 有父(类/接口引用)指向(子/实现)类对象

5. 接口的实现类

要么重写接口中所有的抽象方法、要么是抽象类

示例代码:

Animal.java

package com.面向对象.Demo28;public interface Animal {// 接口 Animalpublic abstract void eat();}

CatImpl.java

package com.面向对象.Demo28;public class CatImpl implements Animal {// CatImpl————实现类 实现了Animal接口/*** 实现类 必须重写 接口中的所有方法*/@Overridepublic void eat() {System.out.println("CatImpl-eat()-鱼");}/*** abstract class AnimalParent————抽象类  父类* Cat extends AnimalParent————子类** 接口 主要体现抽象的行为* interface Animal————接口  父类* CatImpl implements Animal 实现类Animal接口  子类** 抽象类 与 接口 有哪些区别?*/
}

Test01.java

package com.面向对象.Demo28;public class Test01 {public static void main(String[] args) {
//        new Animal();// 报错,抽象类与接口 不能被实例化// 都是通过 多态机制Animal animal = new CatImpl();animal.eat(); //CatImpl-eat()-鱼}
}

DogImpl.java

package com.面向对象.Demo28;//public class DogImpl implements Animal{// 不想在实现类里重写Animal接口——abstract//    @Override
//    public void eat() {}
public abstract class DogImpl implements Animal{}

MayiktDogImpl.java

package com.面向对象.Demo28;public class MayiktDogImpl extends DogImpl{//类图 Ctrl+Alt+u// MayiktDogImpl类 继承 DogImpl类,就必须重写 DogImpl类中的所有方法@Overridepublic void eat() {}
}


接口成员访问特点

1. 成员变量只能是常量;(直接通过接口的名称访问即可)

        默认修饰符 public static final

2. 成员方法只能是抽象方法;(JDK8开始 是可以在接口中定义非抽象方法  需要加上default)

        默认修饰符 public abstract

3. 接口没有构造方法;

        因为接口只要对行为进行抽象,没有具体存在,一个类如果没有父类,默认继承自Object类

示例代码:

Animal.java

package com.面向对象.Demo29;public interface Animal {
//    public int code1 = 100;
//    public final int code2 = 200; // final 修饰 不能修改
//    public  int code2 = 200; // final 修饰 不能修改, 默认是已经加上final
//    public static int code3 = 300; //static 修饰 Animal.属性名称 访问
//    public  int code3 = 300; //static 修饰 Animal.属性名称 访问,默认是已经加上static///*** 综上,上述代码可以简化,* 成员变量只能是常量;* 默认修饰符 public static final*/int code1 = 100; //==>public final static int code1 = 100;int code2 = 200;int code3 = 300;/*** 抽象方法* 默认前面已经加上了public abstract*/void eat();//==>public abstract void eat();/*** 在接口中 是否可以定义 非抽象方法呢? jdk8 是可以在接口中定义 非抽象方法 default* jdk8之前是不可以在接口中定义非抽象方法的*/default void show(){ // ==> public default void show(){System.out.println("接口中-非抽象方法-show()");}/*** 在我们的接口中 是没有构造方法* 抽象类 和 接口 都是不能 直接 new* 抽象类 是有 构造方法* 接口 主要是对我们的行为来做抽象的概念*/
//    public Animal(){}  // 报错,接口是没有抽象方法的
}

DogImpl.java

package com.面向对象.Demo29;public class DogImpl implements Animal { //==>public class DogImpl extends Object implements Animal{@Overridepublic void eat() {System.out.println("DogImpl-eat()");}public DogImpl() {super(); // 默认,父类中 无参构造方法 是我们Object 父类}/*** 既然 Animal接口中不可以定义无参构造方法(也不属于父类),那这里的是如何super()访问父类的?*  ∵ 定义了一个类 如果没有继承任何父类,则在默认情况下 就继承了我们的 object父类*  任何类的父类 都是 Object*  new DogImpl()————先执行Object父类-无参构造方法,再执行DogImpl-无参构造方法*/
}

Test01.java

package com.面向对象.Demo29;public class Test01 {public static void main(String[] args) {/*** 1.在接口中 定义的 成员变量 都是为 常量*      默认的成员变量是已经加上public final static 关键字的,* 2.在接口中 定义的 成员方法 默认的情况下 就是为 抽象方法*      默认已经加上了 public abstract 修饰成员方法,实现类 必须重写 接口中所用的抽象方法*/Animal dog = new DogImpl();System.out.println(dog.code1); //100System.out.println(dog.code2); //200System.out.println(dog.code3); //300//        dog.code1 = 300;//报错,常量是不可以修改
//        dog.code2 = 200;//报错,Cannot assign a value to final variable 'code2'
//        dog.code3 = 100;//报错,在接口中 定义的 成员变量 都是为 常量System.out.println("===========");System.out.println(Animal.code1); //100System.out.println(Animal.code2); //200System.out.println(Animal.code3); //300}
}

下一篇文章:

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

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

相关文章

从零手搓一个【消息队列】创建核心类, 数据库设计与实现

文章目录 一、创建核心类1, 交换机2, 交换机类型3, 队列4, 绑定5, 交换机转发 & 绑定规则6, 消息7, 消息属性 二、数据库设计1, 使用 SQLite2, 使用 MyBatis2.1, 创建 Interface2.2, 创建 xml 文件 三、硬盘管理 -- 数据库1, 创建 DataBaseManager 类2, init() 初始化数据库…

算法题系列10·最长公共前缀

目录 题目描述 思路 实现 题目描述 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1: 输入:strs ["flower","flow","flight"] 输出:&qu…

LabVIEW开发教学实验室自动化INL和DNL测试系统

LabVIEW开发教学实验室自动化INL和DNL测试系统 如今,几乎所有的测量仪器都是基于微处理器的设备。模拟输入量在进行数字处理之前被转换为数字量。对于参加电气和电子测量课程的学生来说,了解ADC以及如何欣赏其性能至关重要。ADC的不确定性可以根据其传输…

蓝桥杯每日一题2023.10.5

3420. 括号序列 - AcWing题库 题目描述 题目分析 对于这一我们需要有前缀知识完全背包 完全背包的朴素写法&#xff1a; #include<bits/stdc.h> using namespace std; const int N 1010; int n, m, v[N], w[N], f[N][N]; int main() {cin >> n >> m;fo…

PyTorch实例:简单线性回归的训练和反向传播解析

文章目录 &#x1f966;引言&#x1f966;什么是反向传播&#xff1f;&#x1f966;反向传播的实现&#xff08;代码&#xff09;&#x1f966;反向传播在深度学习中的应用&#x1f966;链式求导法则&#x1f966;总结 &#x1f966;引言 在神经网络中&#xff0c;反向传播算法…

华为OD七日集训第6期 十一特辑 - 按算法分类,由易到难,循序渐进,玩转OD

目录 专栏导读华为OD机试算法题太多了&#xff0c;知识点繁杂&#xff0c;如何刷题更有效率呢&#xff1f; 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、优先队列4、滑动窗口5、二叉树6、并查集7、栈 三、算法1、基础算法① 贪心算法② 二分查找③ 分治…

OpenCV 15(SIFT/SURF算法)

一、SIFT Harris和Shi-Tomasi角点检测算法&#xff0c;这两种算法具有旋转不变性&#xff0c;但不具有尺度不变性&#xff0c;以下图为例&#xff0c;在左侧小图中可以检测到角点&#xff0c;但是图像被放大后&#xff0c;在使用同样的窗口&#xff0c;就检测不到角点了。 尺度…

JavaScript操作CSS样式

上节课我们基本完成了游戏的主体&#xff0c;这节课我们来学习如果使用JavaScript去操作CSS样式 ● 例如&#xff0c;我们现在想当玩家输入对的数字之后&#xff0c;我们讲背景改为绿色&#xff0c;并且把number的框宽度变大 const secretnumber Math.trunc(Math.random() * …

经典算法-----汉诺塔问题

前言 今天我们学习一个老经典的问题-----汉诺塔问题&#xff0c;可能在学习编程之前我们就听说过这个问题&#xff0c;那这里我们如何去通过编程的方式去解决这么一个问题呢&#xff1f;下面接着看。 汉诺塔问题 问题描述 这里是引用汉诺塔问题源自印度一个古老的传说&#x…

目前制造企业生产计划现状是什么?有没有自动化排产系统?

大家都知道&#xff0c;人的指挥中心是大脑&#xff0c;大脑对我们的发出各种各样的指令&#xff0c;告诉我们&#xff1a;“手”做什么事情&#xff0c;“眼睛”看什么地方&#xff0c;“耳朵”听什么声音&#xff0c;然后再将摸到的、看到的、听到的信息传递给大脑&#xff0…

制作 3 档可调灯程序编写

PWM 0~255 可以将数据映射到0 75 150 225 尽可能均匀电压间隔

maven下载、本地仓库设置与idea内置maven设置

一、下载安装maven maven下载官网&#xff1a;https://maven.apache.org/download.cgi 下载到本地后解压 二、配置环境变量 我的电脑-属性-高级系统设置-环境变量/系统变量 新建MAVEN_HOME 变量值为自己的maven包所在的位置 编辑path 添加 %MAVEN_HOME%\bin 三、测试 Win…

一个案例熟悉使用pytorch

文章目录 1. 完整模型的训练套路1.2 导入必要的包1.3 准备数据集1.3.1 使用公开数据集&#xff1a;1.3.2 获取训练集、测试集长度&#xff1a;1.3.3 利用 DataLoader来加载数据集 1.4 搭建神经网络1.4.1 测试搭建的模型1.4.2 创建用于训练的模型 1.5 定义损失函数和优化器1.6 使…

redis持久化与调优

一 、Redis 高可用&#xff1a; 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&#x…

POJ 2886 Who Gets the Most Candies? 树状数组+二分

一、题目大意 我们有N个孩子&#xff0c;每个人带着一张卡片&#xff0c;一起顺时针围成一个圈来玩游戏&#xff0c;第一回合时&#xff0c;第k个孩子被淘汰&#xff0c;然后他说出他卡片上的数字A&#xff0c;如果A是一个正数&#xff0c;那么下一个回合他左边的第A个孩子被淘…

通过usb串口发送接收数据

USB通信使用系统api&#xff0c;USB转串口通信使用第三方库usb-serial-for-android&#xff0c; 串口通信使用Google官方库android-serialport-api。x 引入包后在本地下载的位置&#xff1a;C:\Users\Administrator\.gradle\caches\modules-2\files-2.1 在 Android 中&#x…

【python海洋专题十一】colormap调色

【python海洋专题十一】colormap调色 上期内容 本期内容 图像的函数包调用&#xff01; Part01. 自带颜色条Colormap 调用方法&#xff1a; cmap3plt.get_cmap(ocean)查询方法&#xff01; Part02. seaborn函数包 01&#xff1a;sns.cubehelix_palette cmap5 sns.cu…

string类的模拟实现(万字讲解超详细)

目录 前言 1.命名空间的使用 2.string的成员变量 3.构造函数 4.析构函数 5.拷贝构造 5.1 swap交换函数的实现 6.赋值运算符重载 7.迭代器部分 8.数据容量控制 8.1 size和capacity 8.2 empty 9.数据修改部分 9.1 push_back 9.2 append添加字符串 9.3 运算符重载…

OpenCV利用Camshift实现目标追踪

目录 原理 做法 代码实现 结果展示 原理 做法 代码实现 import numpy as np import cv2 as cv# 读取视频 cap cv.VideoCapture(video.mp4)# 检查视频是否成功打开 if not cap.isOpened():print("Error: Cannot open video file.")exit()# 获取第一帧图像&#x…

SpringCloud Alibaba - Sentinel 微服务保护解决雪崩问题、Hystrix 区别、安装及使用

目录 一、Sentinel 1.1、背景&#xff1a;雪崩问题 1.2、雪崩问题的解决办法 1.2.1、超时处理 缺陷&#xff1a;为什么这里只是 “缓解” 雪崩问题&#xff0c;而不是百分之百解决了雪问题呢&#xff1f; 1.2.2、舱壁模式 缺陷&#xff1a;资源浪费 1.2.3、熔断降级 1.…