【Java】抽象类与接口

news2025/1/10 5:00:40

文章目录

  • 1.抽象类
    • 1.1抽象方法
  • 2.接口
  • 3.抽象类和接口的区别
    • 3.1代码中区分:
    • 3.2设计层面区分

  在面向对象编程中,抽象是非常重要的一个特征。在Java中可以通过抽象类或接口的形式实现这一特性。

1.抽象类

Java关键字 abstract对应抽象类的使用

1.1抽象方法

  在Java中有一种方法,没有具体实现只有声明,这就是抽象方法。

abstract void test();

一个类只要有一个抽象方法,那么这个类必须用abstract关键字修饰,即这个类为抽象类。
在这里插入图片描述

创建一个动物的抽象类,拥有一个eat的抽象方法

public abstract class Animal {
    abstract void eat();
}

因为抽象方法没有实现,所以抽象类便是为了继承而产生的。通过子类继承该抽象类,重写实现抽象类的方法。抽象方法不能是private类型,因为子类无法重写,默认为public类型。

public class Cat extends Animal{
    @Override
    void eat() {
        System.out.println("cat eat");
    }
}

猫继承动物这个抽象类,所以可以重写eat这个抽象方法,但是需要注意,一定要重写父类所有的抽象方法,否则会报错。如果子类不想实现抽象方法,那么子类也必须是抽象类,即抽象类继承抽象类。

public abstract class Animal {

    public Integer age;
    
    abstract void eat();
    
    public void sleep(){
        System.out.println("sleep");
    }
}

抽象类并不是只能有抽象方法,同样可以拥有普通方法和成员变量

在这里插入图片描述
抽象类并不能被实例化,只能实例化他的子类。

2.接口

  接口通常是提供别人调用的方法或者函数,Java关键字 interface对应接口的定义,实现接口使用implement关键字。

  在接口中的抽象方法,会被隐式的指定为public abstract类型。同样的,接口也可以拥有成员变量,但同样会被隐式指定为public static final类型,使用其余关键字修饰会报错。
在这里插入图片描述
  接口可以感觉比抽象类更抽象的存在,并且接口不支持方法的实现,只能声明方法。

3.抽象类和接口的区别

3.1代码中区分:

  1. 抽象类中可以实现方法,并且允许非抽象方法存在,允许不同关键字修饰方法;接口中只能有public abstract 修饰的抽象方法,并且只有声明,没有实现。
  2. 抽象类中的成员变量可以有不同关键字修饰,但接口中的成员变量只允许public static final关键字修饰。
  3. 如果是非抽象类实现接口,那么需要重写接口的所有方法,如果是抽象类实现接口,那么可以不需要重写,类似于抽象类继承抽象类不一定要重写所有抽象方法。
  4. 抽象类允许静态方法和代码块,接口不允许静态方法和代码块。
  5. 类只能继承一个抽象类,但可以实现多个接口。

3.2设计层面区分

抽象类是对整体事物进行抽象,接口是对局部行为抽象。具体一点就相当于飞机和鸟可以分别抽象为两个抽象类类,而飞行不能是一个类,但是可以设计为一个飞行接口,然后鸟类和飞机类用不同的方式实现飞行这个接口。不同的鸟和飞机分别继承对应的抽象类,可以飞行的实现飞行接口,不能的则不实现。

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

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

相关文章

【快速排序】

快速排序 递归法 1、快排 快速排序算法使基于分治策略的一个排序算法,其基本思想是,对于输入的子数组 nums[left : right] 按以下3个步骤排序: (1)分解:以 nums[left] 为基准元素将 nums[left : right] …

Wisej.NET 3.2 WiseJ Framework Crack

Web Development for Business Applications build ›› migrate ›› modernize ›› See the amazing things people are doing with Wisej.NET Customer storiesmadewithWisej.com Wisej 3.2 is released! read more ›› Wisej.NET Rapid .NET Web Development - 3.2 beta …

【深度学习】第一门课 神经网络和深度学习 Week 1 深度学习概论

文章目录 目录 目录 文章目录 1.1 欢迎来到深度学习 1. 为什么要学深度学习? 2. 我们将学习到哪些内容? 1.2 什么是神经网络? 引例 问题 题解 抽象 复杂化问题 建模 1.3 用神经网络进行监督学习 1. 概念辨析 2. 用神经网络进…

Hive 实战第一讲 hive基本介绍以及环境搭建

文章目录 1.Hive介绍1.1 hive 基本情况1.2 Hive架构原理1.3 Hive 安装1.4 元数据配置1.5 hive 服务部署1.6Hive常用交互命令1.6.1 Hive参数配置方式 1.Hive介绍 1.1 hive 基本情况 hive基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表。 Hive是…

程序员必备的工具网站,大幅度提升你的工作效率

前言: 相信很多人不光是在编程的过程中,在平时的生活中,也经常会收藏一些有用的网站,方便使用的时候,靠这些网站来解决一些麻烦的事情。 我就把我收藏的一些经常用的工具网站分享给你们,你们也可以收藏起来…

web网络安全

在学习网络安全之前,必须要先知道一个组织——OWASP。 OWASP是一个开源的、非盈利的全球性安全组织,致力于应用软件的安全研究。我们基于该组织公布的技术文档来学习相关网络攻击原理和预防措施,web安全的核心是——永远不要相信用户传过来的…

OLED显示实验

实验内容 点亮OLED,并实现ASCII 字符的显示。 OLED简介 OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD&#xff09…

Java10

Java10 (一)、配置文件(二)、多线程2.1 并发和并行2.2 多线程的实现方式2.3 常见成员方法2.3.1 线程的优先级2.3.2 守护线程(备胎线程)2.3.3 礼让线程和插入线程 2.4 线程生命周期2.4 线程安全问题2.5 锁2.…

Android Input kl文件实现键值映射

Android Keyevent定义在KeyEvent.java 截图对应 public static final int KEYCODE_SYSRQ 120; adb shell input keyevent SYSRQLinux Scancode定义在input-event-codes.h #define KEY_SCALE 120可以看到是不对应的 本来想通过指纹双击实现截图功能,发现上报scanco…

浅谈性能测试策略的理解

面对日益复杂的业务场景和不同的系统架构,前期的需求分析和准备工作,需要耗费很多的时间。而不同的测试策略,也对我们的测试结果是否符合预期目标至关重要。 这篇博客,聊聊我个人对常见的性能测试策略的理解,以及它们…

tkinter+爬虫(re库,tkinter库详解)

1.安装和认识本次实验所需要的库 re库(正则库,本次实验用于匹配文本) tkinter库 (GUI库,用于制作可视化界面) requests库 (网络请求库,用于制作爬虫) re和tkinter均为…

node 脚本调试

Node 脚本调试 node --inspect-brk index.js 执行以上命令,然后打开浏览器的控制台会发现有个node的logo 点击这个图标就可以开始调试代码 调试webpack 只需要找到webpack的执行入口,然后执行以下命令,只要是node脚本都可以进行调试。 n…

Shell脚本完成web服务器的建设

一,要求 1,安装httpd软件 2,定义防火墙规则 3,设置selinux为强制模式 4,web服务器的端口为8080 5,web服务器的内容目录为 /www/8080 6,所有操作开机有效 7,所有操作必须进行…

2022年上半年软件设计师下午试题

【试题四】(共15分) 阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。 工程计算中经常要完成多个矩阵相乘的计算任务,对矩阵相乘进行以下说明。 (1)两个矩阵相乘要求第一个矩阵的列数等于第二个…

适合广告行业使用的企业网盘工具

Zoho Workdrive 是一款非常适合广告行业使用的企业网盘工具,它可以帮助广告行业进行高效、有序的项目管理。作为一名广告行业从业者,你是否遇到过以下问题? 2.文件无法有效共享 团队合作效率低下客户需求无法及时满足 这些问题都会严重影响项…

【Linux】Redis高可用概述2(Redis 发布订阅、Redis 事务、Redis主从复制)

一、Redis 发布订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。 发送者可以向多个订阅者发送消息,订阅者可以收到多个发送者送来的消息,也就是是说发送者和订阅者是多对多的关系 实例…

MATLAB中资源管理器无法安装资源解决方法详细教程

摘要:介绍使用MATLAB获取附加功能时出现“续订软件维护服务”的界面问题解决方案,即使用预先从官网下载的安装包文件,直接运行离线安装文件后会自动弹出附加功能管理界面,这时可以安装该附加工具,详细过程见以下介绍。…

ProtoBuf原理

一、文章 https://zhuanlan.zhihu.com/p/404782892 二、测试 1.test.proto syntax "proto3";package proto; option go_package "./;proto";message Msg{uint32 age1 1;sint32 age2 2;string name 3;bytes data 4; }2.main.go package mainimpor…

【滤波】多元卡尔曼滤波器

本文主要翻译自rlabbe/Kalman-and-Bayesian-Filters-in-Python的第6章节06-Multivariate-Kalman-Filters(多元卡尔曼滤波器)。 %matplotlib inline#format the book import book_format book_format.set_style()简介 我们现在准备研究和实现完整的、多…

财报解读:Q2业绩指引未达预期,狂奔的爱彼迎要减速了?

全球民宿龙头爱彼迎Airbnb迎来了一个强劲的开端。 美东时间5月9日盘后,爱彼迎发布了2023年第一季度财报。财报显示,爱彼迎一季度营收、净利润、总预订金额都获得了不同程度增长,超出市场预期。美中不足的是,公司预计二季度营收下…