面向对象Java基础

news2024/11/28 10:01:06

前言

看大话设计模式的时候,发现自己的基础不是很扎实,重新回顾一些存在有点点不确定的内容,并从书中截取下来,做成笔记快速复习。

1、字段和属性

  1. 字段:用private修饰,也叫私有变量。
  2. 属性:字段的类中,具有setget方法时,该字段称为属性。

2、三大特性

2.1、封装

每个对象都包含它能进行操作所需要的所有信息

优点:

1、良好的封装能够减少耦合
2、类内部的实现可以自由地修改
3、类具有清晰的对外接口

2.2、继承

对象的继承是一种 ‘is-a’ 的关系,“B是A”(二哈),表示B可以继承A。
B是A的特殊化,除了A(狗)的特性外,还具有自己独有的个性(🐶)
A:父类(基类);B:子类(派生类)
注意:两个类之间是 ‘has-a’ 的关系时,表示某个角色具有某一项责任,不适合继承

重点:

1、子类拥有父类非private的属性和功能
2、子类具有自己的属性和功能,即子类可以加入父类没有的属性和功能
3、子类还可以 以自己的方式 实现父类的功能(重写Override)
4、对于构造方法,它不能被继承,只能被调用。例子如下

// 父类
public class Dog{
	protected String name = "";
	public Dog(){
		this.name = "dog";
	}
}

// 子类
public class eha extends Dog{
	public eha(){
		super();
	}
}

补充:

protected表示继承时,子类可以对父类有完全的访问权

优点:

继承使得所有子类公共的部分都放在了父类,使得代码得到了共享,这就避免了重复,另外,继承可使得修改或扩展更为容易。

缺点:

父类变,子类也得变;继承会破坏包装,父类实现细节暴露给子类;父类与子类强耦合。

2.3、多态✨

多态:不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行

注意:
1、子类以父类的身份出现
2、子类在工作时,以自己的方式来实现
3、子类以父类的身份出现时,子类特有的属性和方法不可以使用

对象的声明:父类(狗)
实例化的对象:子类(二哈,柯基)

狗 dog = new 二哈();
狗 dog = new 柯基();

PS:这里还没有看的很具体,后面有内容再补充

3、抽象类

实例化没有任何意义的父类,可以改成抽象类。
类和方法用abstract声明,为抽象类和抽象方法

public abstract class 抽象类名{
	...
	// protected表示继承时,子类可以对父类有完全的访问权
	protected abstract String 抽象方法名();
}

注意:
1、抽象类不能实例化(不能new的;‘动物’是抽象的,没有具体对象与之对应,实例化没有意义
2、抽象方法是必须被子类重写的方法(本来就啥也没有,不重写就没意义了)
3、如果类中包含抽象方法,那类必须定义为抽象类,无论是否包含其他一般方法。
4、抽象类拥有尽可能多的共同代码,拥有尽可能少的数据。

  • 问题:什么时候用抽象类?

抽象类代表一个抽象的概念,它提供一个继承的出发点,当设计一个新的抽象类时,一定时用来继承的,所以,在一个以继承关系形成的等级结构里面,树叶节点应当时具体类,而树枝节点均应当时抽象类

在这里插入图片描述

4、接口

接口:把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦类实现了接口,类就可以支持接口所指定的所有属性和成员。

抽象类和接口的异同:

  • 相同:声明接口语法和抽象类一样,在类上,class前面加上关键字(interface;abstract)
  • 区别1:
    1、是对对像的抽象,抽象类是对的抽象,接口是对行为的抽象。
    2、如果行为跨越不同类对象,可以使用接口;对于一些相似的类对象,用继承抽象类。
    3、从设计角度,抽象类是从子类中发现公共的东西,泛化出父类,然后子类继承父类;而接口是根本不知道子类的存在,方法如何实现还不确定,预先定义(CRUD久了,一点就通🤔)
    【抽象类是自底向上抽象,接口是自顶向下设计
  • 区别2:如下表
接口抽象类
不包含任何成员的实现方法(含有具体实现的方法)可以包含
成员(接口中的方法)需要实现类实现抽象成员可以被子类部分实现
一个类可以实现多个接口一个类只能继承一个抽象类
  • 规范:
    在类名需要前加上一个大写的 I

  • 理解:
    在这里插入图片描述

5、装箱和拆箱

装箱:把值类型打包到Object引用类型的一个实例中
拆箱:从对象中提取值类型

// 装箱 boxing
int i = 1;
Object o = (Object)i;

// 拆箱 unboxing
o = 2;
i = (int)o;

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

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

相关文章

2.Docker操作

文章目录 Docker操作Docker镜像操作搜索镜像获取镜像镜像加速下载查看镜像详细信息为镜像添加标签删除镜像导出导入镜像上传镜像 Docker容器操作创建容器查看容器状态启动容器创建并启动容器进入容器停止容器删除容器复制容器文件到宿主机容器的导出导入 Docker操作 ###查看do…

【天工Godwork精品教程】天工3.1.7安装教程(附Godwork完整版下载地址)

本文讲解天工3.1.7安装过程(附Godwork完整版网盘下载地址)。 文章目录 一、天工3.1.7安装教程1. 安装GodWork-AT 3.1.72. 安装GodWork-AT 3.1.7补丁3. 安装GodWork-EOS-Setup-2017B-12314. 安装GodWork-EOS补丁5. 运行godwokr软件6. 生成ZC码7. 输入ZC码8. eos插件调用二、天…

AtcoderABC245场

A - Good morningA - Good morning 题目大意 给定Takahashi和Aoki的起床时间,判断谁先起床。 思路分析 题目要求比较Takahashi和Aoki的起床时间。首先,将起床时间转换为以分钟为单位。然后,通过比较两者的起床时间来确定谁先起床。 时间复…

文献阅读笔记——求解车辆路径问题及其变体的元启发式算法的分类综述

论文题目:A taxonomic review of metaheuristic algorithms for solving the vehicle routing problem and its variants 其他信息:Computers & Industrial Engineering|2020|Raafat Elshaer⁎, Hadeer Awad 文章贡献:1)对使…

RabbitMQ安装及简单使用

说明:RabbitMQ(官网:)是一门异步通讯技术,使用异步通讯技术,可解决同步通讯的一些问题。 安装 本文介绍在云服务器上安装RabbitMQ,操作系统是CentOS 7,远程连接工具是WindTerm&…

抖音seo源码部署/开源不加密可二开/抖音seo优化开发方案

一、前言 抖音是目前国内非常流行的短视频平台之一,用户数量庞大,更是吸引了许多企业和个人在上面开设账号,通过发布内容来进行流量变现。但是,在一个账号发布内容的同时,管理员又需要同时关注多个账号,对账…

C语言--程序环境和预处理

翻译环境 C语言的代码是文本信息,对于计算机来说无法直接理解,需要通过翻译环境进行翻译成二进制信息; 我们在写代码的时候,一般都会写在一个源文件中,这时候我们就使用我们的编译器(VS)将其转换为机器代码&#xff0…

汉诺塔问题(Hanoi Tower)--递归典型问题--Java版(图文详解)

目录 概述问题来源汉诺塔问题的规则 实现解题思路一个盘子两个盘子三个盘子n个盘子 递归概念递归特性递归的时间复杂度汉诺塔中的递归 代码 总结 概述 问题来源 汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智…

2023无监督摘要顶会论文合集

2023无监督摘要顶会论文合集 写在最前面ACL-2023Aspect-aware Unsupervised Extractive Opinion Summarization 面向的无监督意见摘要(没找到)Unsupervised Extractive Summarization of Emotion Triggers *情绪触发(原因)的 *无监督 *抽取式 摘要&#…

Python Request get post 代理 基本使用

Python Request get post 代理 常用示例 文章目录 Python Request get post 代理 常用示例一、Pip install requests二、Requests 请求时携带的常用参数1、参数说明2、headers3、requests 常用参数:url、headers、proxies、verify、timeout 三、Requests Get Post1、Get2、Post…

【Kotlin】基础速览(1):操作符 | 内建类型 | 类型转换 | 字符串模板 | 可变 var 和不可变 val

📜 本章目录: 0x00 操作符(operators) 0x01 内建类型(Build-in) 0x02 类型转换:显式类型转换 0x03 在较长数字中使用下划线 0x04 字符串(String) 0x05 字符串模板&…

grpc中间件之链路追踪(otel+jaeger)

参考文档 https://github.com/grpc-ecosystem/go-grpc-middleware/blob/main/examples/client/main.go https://github.com/grpc-ecosystem/go-grpc-middleware/blob/main/examples/server/main.go https://github.com/open-telemetry/opentelemetry-go/blob/main/example/jaeg…

基于深度学习的高精度道路瑕疵检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度道路瑕疵(裂纹(Crack)、检查井(Manhole)、网(Net)、裂纹块(Patch-Crack)、网块(Patch-Net)、坑洼块&#x…

销售易的12年与七个瞬间

导读:企业级没有捷径 12年对一家企业意味着什么? 在消费互联网领域,12年足够长,短短几年内上市的故事过去屡见不鲜。在企业服务的toB领域,产业成熟和企业发展的时间维度被拉长,但故事同样精彩。 2023年7月1…

漫谈大数据时代的个人信息安全(三)——“点赞之交”

大数据时代的个人信息安全系列三:“点赞之交” 1. 点赞之交2. 点赞诈骗3. 个人信息保护小贴士 互联网就像公路,用户使用它,就会留下脚印。 每个人都在无时不刻的产生数据,在消费数据的同时,也在被数据消费。 近日&am…

传智教育成功入选教育部2023年产学合作协同育人项目

传智教育成功入选教育部2023年产学合作协同育人项目 近日,教育部产学合作协同育人项目专家组发布《关于公布教育部产学合作协同育人项目指南通过企业名单(2023年5月)的通知》,传智教育申报的“教学内容和课程体系改革项目 、师资…

zygote forkSystemServer及systemServer启动

###zygote forkSystemServer方法 通过上一篇文章我们了解到zygote 在ZygoteInit.java类的main方法中调用forkSystemServer方法 UnsupportedAppUsagepublic static void main(String[] argv) {ZygoteServer zygoteServer null;....省略部分代码//根据环境变量(LocalServerSocke…

向量检索增强chatglm生成

背景: 基于chatglm构建agnet:chatglm实现Agent控制 - 知乎 前面一篇文章已经介绍了如何去搭建LLM Agent控制系统,也简单介绍了如何去构建Toolset和构建Action。但是在上篇文章中Toolset其实是基于搜索api构建的,从这篇文章开始后…

C++ stack和queue 模拟实现

stack和queue 模拟实现 模拟栈实现模拟队实现 模拟栈实现 1 栈是一种容器适配器,专门设计用于后进先出的后进先出环境,在这种环境中,元素只从容器的一端插入和提取。 2 栈是作为容器适配器实现的,这些适配器是使用特定容器类的封装…

获取gitlab上项目最近更新时间

获取gitlab上项目列表过程及脚本_xiaodaiwang的博客-CSDN博客使用Python及shell,获取gitlab上项目列表过程及脚本https://blog.csdn.net/xiaodaiwang/article/details/131781316?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rI…