day14_oop_抽象_接口

news2024/9/27 21:25:28

今日内容

上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili
同步笔记沐沐霸的博客_CSDN博客-Java2301
零、 复习昨日
一、作业
二、抽象
三、接口

零、 复习昨日

多态的好处:

  1. 扩展性强.加入新的功能,不需要改动代码
  2. 降低代码耦合度(解耦合或者松耦合)

一、抽象类

1.1 抽象类语法

正常类内有成员,成员属性和成员方法

生活中的抽象: 就是看不懂,不理解…

程序中的抽象类: 跟之前正常类不太一样,有点看不懂…


抽象类的语法

  1. 抽象类还是类
  2. 抽象类具体是方法变抽象了,是方法没有方法体
  3. 没有方法体要使用abstract修饰
  4. 抽象方法必须放在抽象类中
  5. 抽象类是使用abstract修饰的类
  6. 抽象类中可以有正常方法
  7. 抽象类中可以有构造方法的,但是不能创建对象

抽象类方法很抽象只有方法签名,没有方法体,没有方法执行! 有构造方法又不能创建对象!!! 那么抽象类存在的意义是什么??

主要用处就是用来当父类的!! 即用来被继承

  1. 子类可以继承抽象类
  2. 继承后必须实现(implement)父类全部抽象方法否则自己类也要定义成抽象类

1.2 抽象类应用

抽象类主要应用场景,就是多态! 将之前的父类变成抽象父类即可,其他用法不变!!

练习1: 改造形状类题目. 形状父类改造成抽象类,其他正常,求各个类的周长和面积

练习2: 改造灯泡类题目. 灯泡类改造成抽象类,其他正常,台灯类实现开各种灯

1.3 总结

为什么需要这么设计成抽象?

抽象类是用来抽象差异性、具体共同点的。也就是将差异性方法抽象化,提供给子类使 用。共同的方法具体化,所有子类继承。


把子类不一样的方法抽象成抽象方法,每个子类都重写
把子类都一样的方法提取到父类,每个子类直接用,不用重写

二、接口

2.1 接口语法

接口比抽象类更抽象的一种java文件,不是类.

接口的语法特点:

  1. 接口中属性是常量,没有变量,默认被 public static final修饰
  2. 接口中的方法默认被public abstract修饰,即每个方法都是抽象方法
  3. 接口中不能有构造方法,不能创建对象

  1. 子类实现接口,要求重写全部抽象方法否则子类定义抽象类
  2. 类可以实现多个接口
  3. 类可以同时继承加实现 (先继承再

接口是可以继承接口,且支持多继承

public interface USB {

    /**
     * 接口中属性是常量,没有变量
     * 默认被 public static final修饰
     */
    public static final int length = 1;

    /**
     * 接口中的方法默认被public abstract修饰
     * 即每个方法都是抽象方法
     */
    public abstract void chuanshu();

    /**
     * 接口中不能有构造方法
     * 不能创建对象
     */
}
/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc 键盘 实现 接口
 * 1 子类实现接口,要求重写全部抽象方法否则子类定义抽象类
 * 2 类可以实现多个接口
 * 3 类可以同时继承加实现 (先继承再实现)
 */
public class Keyboard extends Suliao implements USB , Electron{

    @Override
    public void chuanshu() {
        System.out.println("键盘传输数据" );
    }

    @Override
    public void tongdian() {
        System.out.println("通电" );
    }
}

2.2 接口应用

接口也可以当做父引用指向子类对象,在多态的场景中使用.

        // 接口当做父引用指向子实现类对象
        USB usb = new Keyboard();
        USB usb2 = new Mouse();

        usb2.chuanshu();

改造台灯类为台灯接口

// 灯泡接口
public interface Bulb {
    void light();
}
// 红灯泡实现接口
public class RedBulb implements Bulb{
    @Override
    public void light() {
        System.out.println("发红光" );
    }
}
// 台灯
public class TableLamp {
    public void open(Bulb bulb) {
        bulb.light();
    }
    public static void main(String[] args) {
        // 买台灯
        TableLamp tableLamp = new TableLamp( );

        // 买灯泡
        RedBulb redBulb = new RedBulb( );
        // 开灯
        tableLamp.open(redBulb); // Bulb bulb = new RedBulb( );
        tableLamp.open(new YellowBulb());
    }
}

2.3 总结

接口微观概念:接⼝是⼀种能力和约定
接⼝的定义:代表了某种能⼒。
⽅法的定义:能⼒的具体要求。

接口

public interface Flyable {
    void fly();
}
public class People implements Flyable{

    @Override
    public void fly() {
        System.out.println("人飞,从楼上跳下飞..." );
    }
}
------------------------------------------------------
    public static void main(String[] args) {
        show(new Keyboard());
        show(new People());
    }
    public static void show(Flyable flyable) {
        flyable.fly();
    }

宏观概念:接⼝是⼀种标准、规范。

image-20230216142638774

其实,用的时候就是跟多态场景一样,
1)将方法的参数列表定义成接口类型,调用方法时传入子实现类
2)定义接口类型数组,向数组存储接口的实现类对象

扩展阅读
接口即是设计:在设计层面,接口可以避免我们陷入对细节的过多思考,
可以让我们站在一个更高的视角对系统做更好的评估,比如系统的交互
设计是否合理,功能是否缺失,是否具备可行性,是否过于复杂等等。


public boolean login(String username,String password)
接口即是约定:在编码层面,接口可以明确的告诉开发人员如何使用
(接口的语义,需要什么作为输入,会有什么输出),而开发人员只
需要根据这些约定去实现具体的功能代码即可。


前后端开发时会有一个接口文档

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

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

相关文章

C# VS2010 Winform 学习笔记遇见问题

参考书本《Visual C# .Net程序设计与应用开发》 学习C#: 对象的封装性:通过get()、set()函数读写。 1.Visual C#面向对象编程中的继承、多态。 2.enum:枚举,array.copy方法:数组拷贝,public static voi…

以应用为导向,看声纹识别中的音频伪造问题

声纹识别,又称说话人识别,是根据语音信号中的声纹特征来识别话者身份的过程,也是一种重要的生物认证手段。历经几十年的研究,当前声纹识别系统已取得了令人满意的性能表现,并在安防、司法、金融、家居等诸多领域中完成…

jenkins构建报错:.java:16: error: package javafx.util does not exist

1、报错 jenkins构建报错 package javafx.util does not exist2、报错原因 代码发现使用了javafx类,该类仅存在OracleJDK中,OpenJDK中没有该类。 jenkins服务器安装的是openjdk 3、卸载OpenJDK 具体不概述了 4、离线安装OracleJDK 1)…

SPI规范的使用和简介

前言 SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。 整体机制图如下: Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的…

win11/10+opencv3.x/4.x配置 VS2019方法(简单使用,亲测)

首先下载 opencv,去官网下载百度》输入opencv,点击opencv|home,进入官网。点击 “Library”---->Release点击 对应版本下的 window版本,点击 --安装--extract---》设置路径。这个就是把库文件扩展到指定的路径下,扩…

Nacos集群+Nginx负载均衡

搭建Nacos集群 注意: 3个或3个以上Nacos节点才能构成集群。要求服务器内存分配最好大于6G以上(如果不够则需修改nacos启动脚本中的默认内存配置)根据nacos自带的mysql建库脚本建立对应数据库(/conf/nacos-mysql.sql)如果是三台服…

KNN&K-means从入门到实战

作者:王同学 来源:投稿 编辑:学姐 1. 基本概念 1.1 KNN k近邻法(k-nearest neighbor,k-NN)是一种基本分类与回归方法。 k近邻法的输入为实例的特征向量对应于特征空间的点;输出为实例的类别&…

发布新闻的步骤和技巧

发布新闻是一项非常重要的任务,无论是企业还是个人,都可以通过发布新闻来传达信息和宣传自己。以下是发布新闻的步骤和技巧,帮助你成功发布一条新闻。1、确定新闻的目标受众在发布新闻之前,你需要确定新闻的目标受众。你希望这条新…

多元回归分析 | CNN-GRU卷积门控循环单元多输入单输出预测(Matlab完整程序)

多元回归分析 | CNN-GRU卷积门控循环单元多输入单输出预测(Matlab完整程序) 目录 多元回归分析 | CNN-GRU卷积门控循环单元多输入单输出预测(Matlab完整程序)预测结果评价指标基本介绍程序设计参考资料预测结果 评价指标 训练结束: 已完成最大轮数。 训练集平均绝对误差MAE…

vue3+ts项目采用canvas模拟批注功能

vue3ts项目模拟批注 一、项目需求: 移动端:实现点击“批注”,随手指绘制出线条,线条封闭之后,视为圈记成功,进而输入评论内容——批注; 二、实现思路: 1.“批注”按钮控制canvas画…

关于cFosSpeed如何配置

cFosSpeed配置一、检查Calibration Done情况二、优化Ping时间和线路校准三、测网速四、cFosSpeed控制台五、配置参数一、检查Calibration Done情况 安装完毕,激活成功后。 右键------>选项------>设置, 打开适配器信息,查看Calibra…

leaflet: 一个marker的世界旅行动画(077)

第077个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中动态的设置marker,这里起个美丽的名字就叫做一个marker的世界旅行。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共76行)相关API参考:专栏目…

内核经典数据结构list 剖析

前言:linux内核中有很多经典的数据结构,list(也称list_head)为其中之一,这些数据结构都是使用C语言实,并且定义和实现都在单独的头文件list.h中。可以随时拿出来使用。list.h的定义不同linux发行版本路径不同,我们可以在/usr/incl…

《python3网络爬虫开发实战 第二版》之基本库的使用-urllib的使用 详解

文章目录1 urllib 库的使用1.1 request模块1.1.1 urlopen类1.1.1.1 最简单的爬虫-爬取百度首页1.1.1.2 urlopen方法的参数1.1.1.2.1 data参数1.1.1.2.2 timeout参数1.1.1.2.3 其他参数1.1.2 Request 类1.1.3 Handler1.2 error模块1.2.1 URLError 类1.2.2 HTTPError类1.2.3 比较…

分布式-分布式服务

微服务API 网关 网关的概念来源于计算机网络,表示不同网络之间的关口。在系统设计中,网关也是一个重要的角色,其中最典型的是各大公司的开放平台,开放平台类网关是企业内部系统对外的统一入口,承担了很多业务&#xf…

【Java】虚拟机JVM

一、运行时数据区域 程序计数器 记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空) Java虚拟机栈 每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程&am…

Mysql数据库的时间(3)一如何用函数插入时间

暂时用下面四个日期函数插入时间 如:insert into Stu(time) values (now()); Mysql的时间函数描述对应的Mysql的时间类型now()/sysdate()NOW()函数以YYYY-MM-DD HH:MM:SS返回当前的日期时间date/time/dateTime/timeStamp/yearcurDate()/current_date()返回当前的日期YYYY-M…

计算机网络笔记(三)—— 数据链路层

数据链路层概述 数据链路层以帧为单位传输数据。 封装成帧:给网络层提供的协议数据单元添加帧头帧尾 差错检测:检错码封装在帧尾 可靠传输:尽管误码不能避免,但如果可以实现发送什么就接受什么,就叫可靠传输 封装成…

RTOS随笔之FreeRTOS启动与同步方法

RTOS启动与同步机制RTOS启动任务切换场景任务同步机制队列信号量事件组任务通知任务延时RTOS启动 FreeRTOS在任务创建完成后调用函数vTaskStartScheduler()启动任务调度器。 vTaskStartScheduler()任务启动函数详解 void vTaskStartScheduler( void ) {BaseType_t xReturn;xR…

项目管理工具dhtmlxGantt甘特图入门教程(九):支持哪些数据格式(下篇)

这篇文章给大家讲解 dhtmlxGantt可以加载或支持哪些数据格式。 dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足应用程序的所有需求,是最完善的甘特图图表库 DhtmlxGantt正版试用下载(qun:764148812&am…