从打开电视的过程认识接口(Java)

目录

问题引入

接口

什么是接口

接口的特点

简单理解接口 

接口的实现 

TV接口及其实现

Controlor接口及其实现

注意 

情景实现

代码

输出



问题引入

在面向对象的世界里,不妨设想,我们打开电视需要些什么呢?显然的,首先要有三个对象,即要看电视的人,一台电视,以及一个遥控器。看电视的过程又大致可以分为三步,即:

  1. 人按下遥控器打开电视
  2. 电视开机显示画面
  3. 人看电视

在这个问题中,我们不难想到,无论什么样的电视,都应该具有”开机并显示画面“的功能(小米的也好,TCL的也罢),同样的,无论什么样的电视遥控器,都应该具有”打开电视“的功能 。

诚然,电视机和遥控器都有不同品牌,但毫无疑问它们都有上述功能,由这点,我们想到可以使用接口加以实现。


接口

什么是接口

我们用interface关键字来声明接口,接口也是一种类,只不过该类是绝对抽象的,规范性很强。

接口的特点

首先,接口内的方法必须且默认全部为抽象方法,这也就意味着:

  • 想要接口被实现,其中的每个方法都必须被实现
  • 方法不能用private修饰

除此以外还有以下三点: 

  1. 接口无构造方法
  2. 接口内的属性全为常量(必须且默认被static final修饰)
  3. 不能被实例化(因为绝对抽象)

简单理解接口 

首先,接口是一种类,类是具有相同属性和行为的对象的集合。但接口有些特殊,在接口中,属性显得不那么重要(反正是常量,没得改),而更加强调行为,因此,接口可以说是从行为的抽象中产生的,且具有强规范性,这可以避免许多不必要的错误。

接口的实现 

我们用implements关键字来声明一个类应当实现的接口,如上文所说,一旦决定实现某个接口,其中的所有方法都必须被实现,用于实现接口的类也被称为接口的”实现类“。


TV接口及其实现

interface TV {void display(Controlor controlor) ;
}class XiaoMiTV implements TV{@Overridepublic void display(Controlor controlor) {System.out.println("小米电视打开");}
}

Controlor接口及其实现

//遥控器接口
interface Controlor {void open();
}class XiaoMiControlor implements Controlor{@Overridepublic void open() {System.out.println("按下小米遥控器");}
}

注意 

我们说接口内的方法必须全为抽象方法,这是就大部分情况而论,但有两种例外:

  1. 静态代码块
  2. Java1.8后,在方法前显式声明default访问权限

情景实现

代码

public class Main {public static void main(String[] args) {Person person = new Person() ;person.watch(new XiaoMiTV() ,new XiaoMiControlor());}
}//遥控器接口
interface Controlor {void open();
}//电视接口
interface TV {void display(Controlor controlor) ;
}//电视接口实现
class XiaoMiTV implements TV{@Overridepublic void display(Controlor controlor) {System.out.println("小米电视打开");}
}//遥控器接口实现
class XiaoMiControlor implements Controlor{@Overridepublic void open() {System.out.println("按下小米遥控器");}
}class Person {public void watch(TV tv ,Controlor controlor){controlor.open();tv.display(controlor);System.out.println("看电视");}
}

输出

本篇博客就到此结束了,新手上路,如有错误,还望海涵! 

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

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

相关文章

Leetcode刷题记录面试基础题day1(备战秋招)

hello,你好鸭,我是康康,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!💪💪💪 目前博客主要更新Java系列、数据库、项目案例、计算机基础等知识点。感谢你的阅读和…

C/C++游戏编程实例-飞翔的小鸟

飞翔的小鸟游戏设计 首先需要包含以下库&#xff1a; #include<stdio.h> #include<windows.h> #include<stdlib.h> //包含system #include<conio.h>设置窗口大小&#xff1a; #define WIDTH 50 #define HEIGHT 16设置鸟的结构&#xff1a; struct …

CentOs7.9中修改Mysql8.0.28默认的3306端口防止被端口扫描入侵

若你的服务器被入侵&#xff0c;可以从这些地方找到证据&#xff1a; 若有上述信息&#xff0c;300%是被入侵了&#xff0c;重装服务器系统以后再重装Mysql数据库&#xff0c;除了设置一个复杂的密码以外&#xff0c;还需要修改默认的Mysql访问端口&#xff0c;逃避常规端口扫描…

wps没保存关闭了恢复数据教程

有时候我们因为电脑问题会忘记保存就关闭wps导致数据丢失&#xff0c;不知道wps没保存关闭了怎么恢复数据&#xff0c;其实数据是无法恢复的。 wps没保存关闭了怎么恢复数据 1、wps没有数据恢复功能&#xff0c;不过可以开启自动备份。 2、我们可以先点击wps左上角的“文件”…

全国超市数据可视化仪表板制作

全国超市消费数据展示 指定 Top几 客户销费数据展示 指定 Top几 省份销费数据展示 省份销售额数据分析 完整结果

Taro+vue3 监听当前的页面滚动的距离

1.需求 想实现一个这样的效果 一开始这个城市组件 是透明的 在顶部 的固定定位 当屏幕滑动的时候到一定的距离 将这个固定的盒子 背景颜色变成白色 2.Taro中的滚动 Taro中的滚动 有固定的api 像生命周期一样 这个生命周期是 usePageScroll import Taro, { useDidShow, useP…

蓝桥杯day14刷题日记

P8707 [蓝桥杯 2020 省 AB1] 走方格 思路&#xff1a;很典型的动态规划问题&#xff0c;对于偶数格特判&#xff0c;其他的正常遍历一遍&#xff0c;现在所处的格子的方案数等于左边的格子的方案数加上上面格子的方案数之和 #include <iostream> using namespace std; …

Linux系统下NAT网卡出现问题,无法上网的解决办法

NTA连接无法上网&#xff0c;如果你试过网上所有教程&#xff0c;检测了Windows环境和Ubuntu环境没问题&#xff0c;且无法启动系统服务、ping网络失败、重置虚拟机网络配置器也无效等种种以下所列原因无法解决&#xff0c;可能在于没有获取IP地址&#xff0c;才不能上网 netw…

书生·浦语大模型实战营 | 第1次学习笔记

前言 书生浦语大模型应用实战营 第二期正在开营&#xff0c;欢迎大家来学习。&#xff08;参与链接&#xff1a;https://mp.weixin.qq.com/s/YYSr3re6IduLJCAh-jgZqghttps://mp.weixin.qq.com/s/YYSr3re6IduLJCAh-jgZqg&#xff09; 第一堂课的视频链接&#xff1a;https://m…

多系统使用ffmpeg读取麦克风数据

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、命令行1.Ubuntu1.alsa2.pulseaudio 2.Windows1.dshow 二、代码总结 前言 最近在搞一个项目需要用到麦克风读取数据并分析&#xff0c;我的开发环境是Ubunt…

Android 12系统源码_多窗口模式(一)和多窗口模式相关方法的调用顺序

前言 从 Android 7.0 开始&#xff0c;Google 推出了一个名为“多窗口模式”的新功能&#xff0c;允许在设备屏幕上同时显示多个应用&#xff0c;多窗口模式允许多个应用同时共享同一屏幕&#xff0c;多窗口模式&#xff08;Multi Window Supports&#xff09;目前支持以下三种…

我的C++奇迹之旅相遇:支持函数重载的原理

文章目录 &#x1f4dd;前言&#x1f320; C支持函数重载的原理&#xff1a;名字修饰(name Mangling)&#x1f309;不同编译器不同函数名修饰规则 &#x1f320;Windows下名字修饰规则&#x1f6a9;总结 &#x1f4dd;前言 函数重载概念 函数重载&#xff1a;是函数的一种特殊…

大模型面试准备(九):简单透彻理解MoE

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何备战、面试常考点分享等热门话题进行了深入的讨论。 合集在这…

Linux(CentOS7)安装 MySQL8

目录 下载 上传 解压 创建配置文件 初始化 MySQL 服务 启动 MySQL 服务 连接 MySQL 创建软链接 下载 官方地址&#xff1a; MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/选择版本前需先看一下服务器的 glibc 版本 ldd --versio…

浏览器工作原理与实践--垃圾回收:垃圾数据是如何自动回收的

在上一篇文章中&#xff0c;我们提到了JavaScript中的数据是如何存储的&#xff0c;并通过例子分析了原始数据类型是存储在栈空间中的&#xff0c;引用类型的数据是存储在堆空间中的。通过这种分配方式&#xff0c;我们解决了数据的内存分配的问题。 不过有些数据被使用之后&am…

CVE-2023-38408漏洞修复 - 升级openssl和openssh

CVE-2023-38408 OpenSSH 代码问题漏洞修复 - 升级openssl和openssh ※ 重要说明&#xff1a; 1、升级后会导致无法用ssh远程登录&#xff0c;提示“Permission denied, please try again.” 2、解决方案请查看本章节【三、解决升级后无法用ssh远程登录】 目录 CVE-2023-38408 O…

WebScraper网页数据爬取可视化工具使用(无需编码)

前言 Web Scraper 是一个浏览器扩展&#xff0c;可以实现无需编码即可爬取网页上的数据。只需按照规则进行配置&#xff0c;即可实现一键爬取导出数据。 安装 进入Google应用商店安装此插件&#xff0c;安装步骤如下&#xff1a; 进入Google应用商店需要外网VPN才能访问&…

微服务demo(三)nacosfeign

一、feign使用 1、集成方法 1.1、pom consumer添加依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>2.2.6.RELEASE</version></dependency&…

WEB APIS知识点案例总结

随机点名案例 业务分析: 点击开始按钮随机抽取数组中的一个数据,放到页面中点击结束按钮删除数组当前抽取的一个数据当抽取到最后一个数据的时候,两个按钮同时禁用(只剩最后一个数据不用抽了) 核心:利用定时器快速展示,停止定时器结束展示 <!DOCTYPE html> <html…

智慧公厕产品的特点、应用场景

随着城市化进程的加速和智能科技的不断发展&#xff0c;智慧公厕作为城市管理的重要组成部分&#xff0c;逐渐成为了现代城市的一道靓丽风景线。它的特点和应用场景备受人们关注和喜爱。 智慧公厕的特点有哪些呢&#xff1f;首先&#xff0c;它智能化的设备和感应技术为其特点…