Java SE 入门到精通—4.抽象类与接口【Java】

抽象类

同接口一样,用来约束子类,限制子类必须拥有某些方法,比普通类多了个抽象方法,用抽象方法该类必为抽象类

概念

没有具体的对象,具体的方法的一个类

abstract关键字声明为抽象类/方法

一个类中有抽象方法则该类必须为抽象类

抽象方法:没有方法体需要子类重写使其具有方法体

抽象类不一定要有抽象方法但抽象方法一定在抽象类中

创建对象

抽象类不是具体的,不能直接创建对象而是通过多态形式创建对象

Fu f=Zi z(具体对象);

抽象类的继承

子类继承抽象父类,则子类必须重写父类所有抽象方法或将该子类定义为抽象类

接口

接口本身为抽象类型

用来扩展类的某些方法(后期扩展某些功能),时其类直接实现该接口

用来约束子类行为特征(必须要有某些功能,比抽象类更为纯粹,只含有抽象方法)

因为子类继承抽象类型(接口),所以必须重写抽象方法,所以该子类间接必须拥有某些方法

创建接口

创建文件时选择interface类型或者class关键字改为interface

接口的实现

接口是抽象类的一种特殊,所以也要使用多态形式创建对象,使用类去实现对象的声明

类‘’实现’‘接口

类 implements 接口            implements:实现

创建对象

接口以多态形式创建对象

一般用具体对象(实现类)对象去实现(方法最多)(在接口单实现的前提下)

成员变量

接口中的成员变量默认被public static final修饰,所以接口中只存在常量,且是静态常量

构造方法

接口中没有构造方法(类继承object父类实现对象构造)

成员方法

接口中成员方法只能是抽象方法,默认被public abstract修饰

接口中抽象方法类型

抽象方法

返回值 method_name();

默认抽象方法

default

在开发场景中,接口中方法的需求越来越多,如果增加接口中的方法则将改动所有实现类,代码维护困难,如果子接口继承,或者实现多个接口,则会导致庞大的接口数量,使项目结构是分复杂,因此java在接口中提出default默认修饰符,被该修饰符修饰的抽象方法拥有方法体,实现类可不重写直接使用方法,也可以选择性重写该方法

[public] default 返回值 method_name(){.......
}默认被public修饰

静态抽象方法

在实际开发中一个类会实现多个接口,如果这些接口都含有相同的方法,那该如何区分,因此,为了解决这个问题,java提出了静态抽象方法,具有方法体,只能通过接口名调用静态方法

[public]static void run(){..........
}默认被public修饰调用静态方法
}
static void main(String[] args) {Interface_name.method();
}默认被public修饰

私有抽象方法(java9)

在接口的开发中,相同方法中必然存在相同的代码块,为了降低代码耦合,因此需要将珙桐属性提取出来,而共性是不提供外部使用的

private 返回值 method_name(){........
}

静态私有抽象方法(java9)

满足静态方法的共性调用

private static 返回值 method_name(){.......
}

抽象方法无方法体,但是被默认,静态,私有修饰时拥有方法体

接口与类的关系

实现关系,类在继承一个类的同时可以实现多几个接口

接口与接口的关系

继承关系,一个接口可以单继承,可以多继承,还可以多层继承


使用接口时一般用具体对象去实现(具体对象方法最多


抽象类与接口的区别

抽象类:和普通类多了该抽象方法,有其他普通方法,变量,可以提供基础属性和方法

接口:只有静态常量和抽象方法,只添加额外特殊方法,更纯粹

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

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

相关文章

统计前端传过来的Req的非空属性个数的工具类

背景 日常开发中,我们通常会根据前端传过来的实体类的属性个数去做逻辑判断,下面的是判断属性个数的工具类。 工具类 public static Integer nonNullFieldCount(Req req) {if (req null) {return 0;}int nonNullFieldCount 0;Field[] fields req.ge…

【Django】Django自定义后台表单——对一个关联外键对象同时添加多个内容

以官方文档为例: 一个投票问题包含多个选项,基本的表单设计只能一个选项一个选项添加,效率较低,如何在表单设计中一次性添加多个关联选项? 示例代码: from django.contrib import adminfrom .models impo…

Java中的关键字有哪些?它们各自的作用是什么?请详细说明?Java中的访问修饰符有哪些?它们的访问权限是怎样的?

1、Java中的关键字有哪些?它们各自的作用是什么?请详细说明? Java中的关键字是预先定义好的,具有特殊含义的标识符,用于表示数据类型、程序结构或控制流程等。以下是Java中的一些常用关键字及其作用: abs…

【软件架构】02-复杂度来源

1、性能 1)单机 受限于主机的CPU、网络、磁盘读写速度等影响 在多线程的互斥性、并发中的同步数据状态等; 扩展:硬件资源、增大线程池 2)集群 微服务化拆分,导致调用链过长,网络传输的消耗过多。 集…

嵌入式Qt 计算器核心算法_3

一.后缀表达式实现算数运算思路 二.算法实现 #include "QCalculatorDec.h"QCalculatorDec::QCalculatorDec() {m_exp "";m_result ""; }QCalculatorDec::~QCalculatorDec() {}bool QCalculatorDec::isDigitOrDot(QChar c) {return ((0 < c)…

基于SpringBoot的景区旅游管理系统

项目介绍 本期给大家介绍一个 景区旅游管理 系统.。主要模块有首页&#xff0c;旅游路线&#xff0c;旅行攻略&#xff0c;在线预定。管理员可以登录管理后台对用户进行管理&#xff0c;可以添加酒店&#xff0c;景区&#xff0c;攻略&#xff0c;路线等信息。整体完成度比较高…

一文搞懂match、match_phrase与match_phrase_prefix的检索过程

一、在开始之前&#xff0c;完成数据准备&#xff1a; # 创建映射 PUT /tehero_index {"settings": {"index": {"number_of_shards": 1,"number_of_replicas": 1}},"mappings": {"_doc": {"dynamic": …

探索气膜球幕影院:未来的电影体验

气膜球幕影院作为一种新兴的电影放映方式&#xff0c;正逐渐成为人们关注的焦点。它采用了充气式膜结构&#xff0c;可以为观众带来 360 度全景的观影体验&#xff0c;让人仿佛置身于电影之中。本文将介绍气膜球幕影院的特点、技术原理以及未来的发展前景。 传说在古代&#x…

Linux系统运维命令:使用 tail,grep组合命令(包括wc,sort,awk,sed等),可以方便的查阅和操作正在改变的日志文件的具体内容

一、命令介绍 1、tail命令 tail命令是Linux系统中常用的命令之一&#xff0c;用于查看文件的末尾内容。它具有许多有用的选项&#xff0c;可以帮助用户轻松地查找并显示文件中的信息。 它默认显示文件的最后10行&#xff0c;但可以通过各种选项来定制输出的行数、字节数等。ta…

十四、图像几何形状绘制

项目功能实现&#xff1a;矩形、圆形、椭圆等几何形状绘制&#xff0c;并与原图进行相应比例融合 按照之前的博文结构来&#xff0c;这里就不在赘述了 一、头文件 drawing.h #pragma once#include<opencv2/opencv.hpp>using namespace cv;class DRAWING { public:void…

Python笔记-super().init(root)的作用

假设我们有一个名为Animal的父类&#xff0c;它有一个属性color&#xff0c;在其构造函数__init__中被初始化&#xff1a; class Animal:def __init__(self, color):self.color color现在&#xff0c;我们想创建一个Animal的子类&#xff0c;名为Dog。Dog类有自己的属性name&…

QPaint绘制自定义仪表盘组件01

网上抄别人的&#xff0c;只是放这里自己看一下&#xff0c;看完就删掉 ui Dashboard.pro QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# You can make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomm…

【xss跨站漏洞】xss漏洞前置知识点整理

xss漏洞成因 xss漏洞是一种前端javascript产生的漏洞。 我们网站基本都是会用到javascript编写一些东西&#xff0c;浏览器也能直接识别javascript。 如果有一个地方能够输入文字&#xff0c;但是他又没有过滤你的输入&#xff0c;那么自己或者他人看到你输入的javascript代…

JVM知识——安全点

安全点是JVM要准备进行垃圾回收时&#xff0c;选定一些特定的位置&#xff0c;当应用程序线程执行到这些位置时&#xff0c;安全的先暂停下来&#xff0c;以便JVM执行GC线程进行垃圾回收。 JVM在字节码指令中会选取一些指令作为安全点&#xff0c;安全点的选取一般是循环结束、…

课时42:表达式_运算符_bc计算

3.1.5 bc计算 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 简介 bc是一种任意精度的计算语言&#xff0c;提供了语法结构&#xff0c;比如条件判断、循环等&#xff0c;功能是很强大的&#xff0c;还能进行进制转换。常见参数-…

week04day02(爬虫02)

<span>: 通常用于对文本的一部分进行样式设置或脚本操作。<a>: 定义超链接&#xff0c;用于创建链接到其他页面或资源的文本。<img>: 用于插入图像。<br>: 用于插入换行。 姓名&#xff1a;<input type"text" value"lisi">…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM驱动编程第七天-内核函数接口(物联技术666)

链接&#xff1a;https://pan.baidu.com/s/1V0E9IHSoLbpiWJsncmFgdA?pwd1688 提取码&#xff1a;1688 //************************************************** #include <linux/module.h> /*module_init()*/ #include <linux/kernel.h> /* printk() *…

【析】考虑同时取送和时间窗的车辆路径及求解算法

期刊&#xff1a;computer engineering and applications 计算机工程与应用![c 引言 1. 问题分析 1.1 问题描述 问题描述为&#xff1a; 若干运输车辆从配送中心出发为客户取送货并最终返回配送中心&#xff0c;每位客户仅由一辆车服务一次&#xff0c;车辆在配送过程中任…

rust实战系列八:常量

在Rust中还可以用const关键字做声明。如下所示: const GLOBAL: i32 0; 使用const声明的是常量&#xff0c;而不是变量。因此一定不允许使用mut关键字修饰这 个变量绑定&#xff0c;这是语法错误。常量的初始化表达式也一定要是一个编译期常量&#xff0c;不 能是运行期的值。它…

ChatGPT丨成像光谱遥感技术中的AI革命:ChatGPT应用指南

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本课程重点介绍ChatGPT在遥感中的应用&#xff0c;人工智…