Java--面向对象--接口

接口的概念与定义

接口可以理解为抽象到不能再抽象的类,但是不要将接口和类混为一谈。可以认为类是一套体系,接口是另外一套体系,只不过类可以实现接口。

接口中的方法全部都是抽象方法,不能存在实现的方法。

接口使用interface关键字定义,接口的定义和类很相似。下面是经过简化的接口的一般形式:

access interface name {

return-type  method-name1(parameter-list);  //可以省略各种修饰符

return-type  method-name2(parameter-list);

...

return-type  method-nameN(parameter-list);

type  varname1 = value;  //可以省略各种修饰符

type  varname2 = value;

..

type  varnameN = value;

}

接口中的属性和方法

(1)接口中所有方法默认是公有的抽象方法。

隐式地标识为public、abstract,并且接口中的方法也只允许使用这两个修饰符。

注意,在抽象类中必需使用abstract关键字明确指定方法为抽象方法。

(2)在接口中所有变量默认为公有的静态常量。

被隐式地标识为public、static、final。这意味着实现接口的类不能修改它们。同时还必须初始化它们。

public  interface A1 {

//接口中的属性必须public、static、final常量

public  static  final  int  I=10;

//接口中的属性public、static、final都可以省略

int  J = 100;

//接口中的方法默认是public、abstract,所以public abstract可以省略

public  abstract  void print();

public  void  print2();

void  print3();

}

注意:

接口能new对象吗?不可以

接口能作为一种类型定义引用变量吗?  可以     A1 a;

接口的实现

一旦定义了一个接口,一个或多个类就可以实现该接口。为了实现接口,在类定义中需要包含implements子句,然后创建接口定义的方法。

class classname implements interfacename {

//

}

注意:

(1)实现接口的类,必须实现接口的所有抽象方法,如果只实现了部分抽象方法,该类必须声明为抽象类。

(2)一个类可以实现多个接口,实现的多个接口用“,”隔开

(3)实现接口的类可以同时继承一个超类,必须是先继承后实现。

public  interface A1 {

//接口中的属性必须是  public static final 常量

public static  final  int I=10;

//接口中的属性    public static final都可以省略

int J = 100;

//接口中的方法都是  public  abstract   所以public abstract可以省略

public abstract void print();

public void print2();

void print3();

}

public interface A2 {

void show();

}

/**

 * 类实现接口   使用implements

 * 类可以实现多个接口,用 , 隔开

 * 一个具体的类,实现接口,必须实现接口的所有抽象方法

 * @author Administrator

 */

public class SubA  implements A1,A2{

@Override

public void print() {

}

@Override

public void print2() {

}

@Override

public void print3() {

}

@Override

public void show() {

}

}

说明:

接口定义了一组抽象方法,实现该接口的类需要实现这些抽象方法,从而实现接口的类就具备了接口所规定的行为(功能)。

在Java中,接口可理解为对象间相互通信的协议,相当于模板。

接口的继承

接口可以通过关键字extends继承另一个接口,其语法和类继承相同。如果类实现的接口继承自另外一个接口,则该类必需实现在接口继承链中定义的所有方法。

接口的实例

实例1

public interface Shape {

double area();

void show();  //打印输出类的成员信息

void draw();  //我是XXX(矩形、圆形、三角形)

}

定义Rectangle、Circle、Triangle类,添加适当的属性,并实现Shape接口

定义测试类测试Rectangle、Circle、Triangle类。在测试类中定义一个Shape[]数组,在该数组中存储不同的形状对象。通过循环,分别调用各个对象的area()、show()、draw()方法。

实例2

public interface IntStack {

void push(int item);

int pop();

}

抽象类和接口的区别

补充:

抽象类有构造方法,接口没有构造方法

类只能单继承,接口可以多重继承接口

抽象类中可以没有抽象方法,但是有抽象方法的类必须是抽象类。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ROS程序设计系列 - 4.ROS Programming

ROS程序设计系列 - 4.ROS Programming 1. 源由2. 概念2.1 ROS services2.2 ROS actions2.3 ROS time2.4 ROS bags2.5 Debugging 3. 常见应用4. 示例4.1 运行4.2 代码 5. 视频课程 1. 源由 继续学习ROS编程,本章主要是一些基本组件和概念。并结合示例代码进行阐述。…

Nuxt 3 路由系统详解:配置与实践指南

title: Nuxt 3 路由系统详解:配置与实践指南 date: 2024/6/21 updated: 2024/6/21 author: cmdragon excerpt: 摘要:本文是一份关于Nuxt 3路由系统的详尽指南。它从介绍Nuxt 3的基本概念开始,包括Nuxt 3与Nuxt 2的区别和选择Nuxt 3的理由。…

区块链技术:重塑金融市场监管的新引擎

一、引言 随着金融市场的不断发展和创新,监管面临的挑战也日益严峻。传统的监管模式已难以满足现代金融市场的需要,而区块链技术的出现为金融市场监管带来了新的机遇。本文将探讨区块链技术在金融市场监管中的作用,以及它如何重塑监管模式&a…

算法训练与程序竞赛题目集合(L3)

目录 L3-001 凑零钱 输入格式: 输出格式: 输入样例 1: 输出样例 1: 输入样例 2: 输出样例 2: L3-002 特殊堆栈 输入格式: 输出格式: 输入样例: 输出样例&…

Ideogram-免费使用的 AI 工具,可以生成逼真的图像、海报、徽标

工具来源:Ideogram | AI工具箱 什么是Ideogram AI? Ideogram AI是一款高效的工具,旨在将文本与AI生成的图像结合在一起。该应用程序提供了用户友好的界面,使您能够轻松地制作出色的艺术作品、标志和设计。 与传统工具不同,Ideogram AI因其能够以无与伦比的简便和速度将…

opencv c++ 检测图像尺寸大小,标注轮廓

1. 项目背景 本项目旨在开发一个图像处理程序,通过使用计算机视觉技术,能够自动检测图像中物体的尺寸并进行分类。项目利用了开源的计算机视觉库 OpenCV,实现了图像的灰度处理、二值化、轮廓检测、边界框绘制以及尺寸分类等功能。通过这些功…

微信小程序登录流程详情及Java代码

一、流程图 说明: 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。 调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key。 获取手机号,调用wx.getPhoneNumber() ,获取加密…

JAVA小知识28:FIle类文件对象

Java 中的 File 类是 java.io 包中的一个类,用于表示文件和目录路径名的抽象表示。它提供了一些方法来操作文件和目录 一、File的创建 1.1、绝对路径 绝对路径是指从文件系统的根目录开始定位文件或目录的完整路径。它通常以根目录符号开始,在 Window…

企业微信集成策略:打破壁垒,驱动企业数字化转型

随着全球化和数字化的快速推进,企业如何在激烈的市场竞争中脱颖而出,成为每个企业家和决策者关注的焦点。腾讯推出的企业微信,作为一款集沟通、协作、管理于一体的企业通讯与办公工具,正逐步成为企业数字化转型的得力助手。NetFar…

fastadmin配合定时任务

一个系统单纯到linux本身的定时任务,是很不方便的,需要结合起来使用定时任务 - 便捷的后台定时任务管理 – 基于ThinkPHP和Bootstrap的极速后台开发框架 1.安装插件 2.配置宝塔定时任务 3.自己用工具生成规则即可:Cron - 在线Cron表达式生成器

Unity URP下通过相机让部分Render不受后处理渲染

我们有时候不想某些对象受到后处理影响,找到了这样一个决绝办法,通过增加一个Overlay相机只照射这个模型来实现,下面看看如何实现。 第一步 首先我们拖一个测试场景,有如下一些元素 一个盒子,以后后处理&#xff0c…

Hadoop3:MapReduce中Reduce阶段自定义OutputFormat逻辑

一、情景描述 我们知道,在MapTask阶段开始时,需要InputFormat来读取数据 而在ReduceTask阶段结束时,将处理完成的数据,输出到磁盘,此时就要用到OutputFormat 在之前的程序中,我们都没有设置过这部分配置 …

Linux 运维 | 4.从零开始,文件目录特殊权限管理实践

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x00 前言简述 描述:前一章,学习了Linux系统中的用户与用户组的管理,此章节我们将继续学习Linux系统中比较基础且重要的文件权限设置与属性管理,在L…

大数据学习-Hive

介绍 分布式 SQL 计算 做数据的统计分析,SQL 是最方便的工具 在大数据中,有很多的统计分析场景,那么 SQL 来处理大数据是非常合适且频繁的 以后可能就是 SQL Boy 了,所以学习前需要有 MySQL 的基础 Hive 的功能 是一个分布式…

【MySQL】索引的原理及其使用

文章目录 什么叫索引减少磁盘IO次数缓存池(Buffer Pool)MySQL的页页内目录页目录 正确理解索引结构为什么Innodb的索引是B树结构各种存储引擎支持的索引聚簇索引和非聚簇索引索引类型 关于索引的操作创建主键索引唯一索引的创建普通索引的创建查看索引删除索引 什么…

在React中,如何利用React.memo函数对函数组件进行优化?

React.memo 是 React 的一个高阶组件,用于对函数组件进行性能优化。它通过记忆化(memoization)来避免不必要的重新渲染。当组件的 props 没有变化时,React.memo 可以防止组件重新渲染,从而提高应用的性能。 使用 Reac…

【Redis】分布式锁基本理论与简单实现

目录 分布式锁解释作用特性实现方式MySQL、Redis、Zookeeper三种方式对比 原理 reids分布式锁原理目的容错redis简单分布式锁实现锁接口实现类下单场景的实现容错场景1解决思路优化代码 容错场景2Lua脚本Redis利用Lua脚本解决多条命令原子性问题 释放锁的业务流程Lua脚本来表示…

开放式耳机怎么选?五款劲爆机型强势PK!2024推荐版!

身为健身达人,我对耳机的要求可不低。开放式耳机让我在健身时既能享受音乐,又能清晰听到教练的指导。它佩戴舒适,不易掉落,而且音质出色,让我沉浸于运动的节奏中。市面上开放式耳机种类繁多,我为大家挑选了…

SD-WAN为什么适合小企业

SD-WAN(软件定义广域网)是一种革新性的网络技术,通过软件智能管理,实现灵活和高效的网络连接。在数字化转型浪潮中,企业对网络稳定性和性能的要求不断提升,SD-WAN因此受到了广泛关注。对于资源有限的小型企…

qml/c++:基础界面的串口设置逻辑

文章目录 文章介绍效果图本机串口打开从虚拟端串口传数据到本机串口 代码添加serialporthandler类serialporthandler.hserialporthandler.cpp获取串口列表打开串口关闭串口清空按钮接收数据按钮逻辑:打开和关闭串口、弹出信息框、按钮文字改变 main.cpp 文章介绍 上…