【Java】抽象类和接口的区别

news2024/11/16 3:38:08

1. 成员区别

  • 抽象类  变量 常量;有构造方法,有抽象方法,也有非抽象方法
  • 接口  常量,抽象方法(JDK8 在接口中定义  非抽象方法)

2. 关系区别

  • 类与类  继承单继承
  • 类与接口  实现,单实现和多实现
  • 接口与接口  继承,单继承和多继承

3. 设计区别

  • 抽象类  对类抽象,包括属性行为(对事物的抽象)
  • 接口  对行为抽象,主要是行为(对行为的抽象)

 下面举例子说明 3.设计区别

例子:门和报警器,将门设为抽象类

行为:关门  开门  报警

门的品牌——PanPan门 MeiXin门 ...

不是所有的品牌门 都带 报警

比如 PanPan门  关门 开门 报警

        MeiXin门 关门 开门  没有报警

门——抽象类



案例代码:

Door.java

package com.面向对象.Demo32;

public abstract class Door {
    private String name;
    private int height;
    private int widht;

    public Door(String name, int height, int widht) {
        this.name = name;
        this.height = height;
        this.widht = widht;
    }

    public String getName() {
        return name;
    }

    public int getHeight() {
        return height;
    }

    public int getWidht() {
        return widht;
    }

    public abstract void open(); //开门

    public abstract void close();//关门
}

Alarm.java

package com.面向对象.Demo32;

public interface Alarm { //报警接口
    void alarm();//报警功能
}

PanPanDoor.java

package com.面向对象.Demo32;

public class PanPanDoor extends Door implements Alarm {
    public PanPanDoor(String name, int height, int widht) {
        super(name, height, widht);
    }

    @Override
    public void open() {
        System.out.println("PanPanDoor-open()");
    }

    @Override
    public void close() {
        System.out.println("PanPanDoor-close()");
    }

    @Override
    public void alarm() {
        System.out.println("PanPanDoor-alarm()");
    }
}

MenXin.java

package com.面向对象.Demo32;

public class MenXin extends Door{
    public MenXin(String name, int height, int widht) {
        super(name, height, widht);
    }

    @Override
    public void open() {
        System.out.println("MeiXin-open()");
    }

    @Override
    public void close() {
        System.out.println("MenXin-close()");
    }
}

Test01.java

package com.面向对象.Demo32;

public class Test01 {
    public static void main(String[] args) {
        MenXin meiXinDoor = new MenXin("MeiXinDoor", 175, 300);
        System.out.println(meiXinDoor.getName() + "," + meiXinDoor.getHeight() + "," + meiXinDoor.getWidht());
        meiXinDoor.open();
        meiXinDoor.close();
        System.out.println("===================");
        PanPanDoor panPanDoor = new PanPanDoor("PanPanDoor", 280, 175);
        System.out.println(panPanDoor.getName() + "," + panPanDoor.getHeight() + "," + panPanDoor.getWidht());
        panPanDoor.open();
        panPanDoor.close();
        panPanDoor.alarm();
    }
}

下一篇文章:内部类

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

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

相关文章

【Java】HashMap 背诵版

HashMap 背诵版 1. HashMap、Hashtable 和 ConcurrentHashMap 的区别?1.1 线程安全:1.2 继承关系:1.3 允不允许null值: 2. HashMap 的数据结构2.1 什么是hash表?2.2 HashMap 的数据结构 3. 什么是hash冲突,…

输入文本波形动画

效果展示 CSS 知识点 绝对定位 实现页面基础布局 <div class"input_box"><input type"text" required /><!-- 动画实际执行者 --><label>Wavy Input Text Aimation</label> </div>使用 JS 把 label 标签的文字拆分…

UG\NX二次开发 特征选择对话框 UF_UI_select_feature

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 感谢粉丝订阅 感谢 qq_42007619 订阅本专栏,非常感谢。 简介: UG\NX二次开发 特征选择对话框 UF_UI_select_feature 效果: 代码: #include <vector>…

[硬件基础]-快速了解触发器

快速了解触发器 文章目录 快速了解触发器1、触发器概述2、触发器和锁存电路之间的区别3、触发器的类型3.1 SR触发器3.2 D触发器3.3 JK触发器3.4 SR触发器和JK触发器的区别3.5 T触发器 触发器是制造存储器件和数字逻辑电路的最重要主题之一。 在本文中&#xff0c;我将讨论触发器…

在LangChain中使用Milvus + openai使用

Milvus(opens in a new tab) 是一个存储、索引和管理由深度神经网络和其他机器学习&#xff08;ML)模型生成的大规模嵌入向量的数据库。 1.文档分割 from langchain.document_loaders import PyPDFLoader pdfloader PyPDFLoader("D:\py\LangChaindao\操作系统原理.pdf&…

安全性算法

目录 一、安全性算法 二、基础术语 三、对称加密与非对称加密 四、数字签名 五、 哈希算法 六、哈希算法碰撞与溢出处理 一、安全性算法 安全性算法的必要性&#xff1a; 安全性算法的必要性是因为在现代数字化社会中&#xff0c;我们经常需要传输、存储和处理敏感的数据…

Linuxzhi6通过源代码编译安装软件

目录 一、使用源代码安装软件的优点 二、编译需求 三、安装 一、使用源代码安装软件的优点 由于自由软件的最新版本大都以源码的形式最先发布&#xff0c;编译安装可以获得软件的最新版本&#xff0c;及时修 复bug 如果当前安装的程序无法满足需求&#xff0c;用户可以根据…

合宙Air780e+luatos+腾讯云物联网平台完成设备通信与控制(属性上报+4G远程点灯)

1.腾讯云物联网平台 首先需要在腾讯云物联网平台创建产品、创建设备、定义设备属性和行为&#xff0c;例如&#xff1a; &#xff08;1&#xff09;创建产品 &#xff08;2&#xff09;定义设备属性和行为 &#xff08;3&#xff09;创建设备 &#xff08;4&#xff09;准备参…

Python小技巧:快速合并字典dict()

文章目录 前言知识点字典合并1. dict.update()基础合并2. 字典推导式 update() 后话 前言 这里是Python小技巧的系列文章。这是第四篇&#xff0c;快速合并字典。 在Python的使用中&#xff0c;有时候需要将两个 dict(字典) 进行合并。 通常我们会借助 dict(字典) 的内置方法 …

【C语言】编译和链接

前言&#xff1a; 编译和链接是计算机程序开发中的两个重要步骤&#xff0c;用于将源代码转化为可执行的程序。 文章目录 一、翻译环境和运行环境二、翻译环境中的编译2.1 预处理&#xff08;预编译&#xff09;2.2 编译2.2.1 语法分析2.2.2 语法分析2.2.3 语义分析 2.3 汇编 三…

【Audio】正弦波生成原理及C++代码

正弦波生成及频谱分析 正弦波公式 诊断系统&#xff08;Diag&#xff09;会通过播放一段指定频率、采样率、时长及振幅的正弦音&#xff0c;以此对Audio测试。正弦波的公式如下&#xff0c;其中 A是振幅、x是时间、F是频率。 y A ∗ sin ⁡ ( 2 ∗ π ∗ x ∗ F ) y A* \s…

【考研数学】高等数学第七模块 —— 曲线积分与曲面积分 | 4. 对坐标的曲面积分(第二类曲面积分)与场论初步

文章目录 二、曲面积分2.2 对坐标的曲面积分&#xff08;第二类曲面积分&#xff09;1. 问题产生 —— 流量2. 对坐标的曲面积分的定义&#xff08;了解&#xff09;3. 对坐标的曲面积分的性质4. 对坐标的曲面积分的计算法&#xff08;1&#xff09; 二重积分法&#xff08;2&a…

properties文件和yaml文件的区别~

之前&#xff0c;关于数据库的连接信息&#xff0c;端口号的设置等&#xff0c;我们会将它分门别类的写在多个文件中&#xff0c;但SpringBoot&#xff0c;它讲究统一的配置管理&#xff0c;我们想设置的任何参数都集中在一个固定位置和命名的配置文件&#xff0c;而该配置文件…

10.4| QT实现TCP服务器客户端搭建的代码,现象

头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget>#include<QTcpServer> //服务器头文件 #include<QTcpSocket> //客户端头文件#include<QList> //链表容器 #include<QMessageBox> …

Error string: Could not load library

启动Rivz时&#xff0c;报错&#xff1a; Error string: Could not load library (Poco exception libg2o_csparse_extension.so.0.1: cannot open shared object file: No such file or directory) [ERROR] [1696572310.529059051]: Failed to load nodelet [/radar_graph_s…

破译滑块验证间距 破译sf顺丰滑块验证

废话不多说直接开干&#xff01; from selenium import webdriver # 导入配置 from selenium.webdriver.chrome.options import Options import time from PIL import Image # 导入动作链 from selenium.webdriver.common.action_chains import ActionChains import random, st…

如何获取高质量的微信私域客户?

在当今数字化时代&#xff0c;企业都在努力寻求创新的营销方式来获取更多的客户。微信私域流量作为一种精准的营销工具&#xff0c;越来越受到企业的青睐。那么&#xff0c;如何获取高质量的微信私域客户呢&#xff1f;本文将为你揭示这一难题的答案&#xff0c;让你轻松Get高转…

STM32--MQ2烟雾传感器

本文主要介绍STM32F103C8T6和烟雾传感器模块的控制算法 简介 烟雾模块选用MQ-2气体传感器&#xff0c;根据传感器的电导率随空气中可燃气体浓度的增加而增大的特性检测空气中可燃气体&#xff0c;然后将电导率的变化转换成对应的电信号 MQ系列烟雾传感分类如下&#xff1a; 该…

基于SSM的校园二手物品交易平台设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Python之字符串构造

Python之字符串构造 字符串str 一个个字符组成的有序的序列&#xff0c;是字符的集合使用单引号、双引号、三引号引住的字符序列字符串是不可变对象&#xff0c;是字面常量 Python3起&#xff0c;字符串都是Unicode类型 x abcde使用for循环遍历x的值&#xff0c;打印并查看…