面向对象Java基础

前言

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

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.mzph.cn/news/4989.shtml

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

相关文章

Microsoft Outlook 共享收发邮件的权限给其他人

点击File 点击Account Settings→DelegateAccess 点击Add

[java安全]CommonsCollections1(LazyMap)

文章目录 【java安全】CommonsCollections1(LazyMap)前言LazyMap如何创建LazyMap对象?如何调用LazyMap的get()方法?如何触发AnnotationInvocationHandler#invoke()方法?POC总结参考 【java安全】CommonsCollections1(LazyMap) 前言 前面我们…

Hadoop: High Available

序言 在Hadoop 2.X以前的版本,NameNode面临单点故障风险(SPOF),也就是说,一旦NameNode节点挂了,整个集群就不可用了,而且需要借助辅助NameNode来手工干预重启集群,这将延长集群的停…

Python学习笔记-Windows下VirtualEnv+VSCode中虚拟环境配置

1 VirtualEnv简介 VirtualEnv是一个虚拟化环境,是独立开的开发环境,在一个文件夹中创建的独立虚拟环境,可以分隔开不同项目,开发互不影响。 优点如下: 使不同的应用开发环境独立,避免互相干扰环境升级不…

RxSwift 使用方式

背景 最近项目业务,所有模块已经支持Swift混编开发,正在逐步使用Swift 方式进行开发新业务,以及逐步替换老业务方式进行发展,所以使用一些较为成熟的Swift 的三方库,成为必要性,经过调研发现RxSwift 在使用…

lvs使用

1.前言 LVS(Linux Virtual Server)是一个基于 Linux 内核的负载均衡器,用于分发网络流量和将请求转发给后端服务器。LVS 提供了多种负载均衡算法和转发模式,以满足不同场景和需求的负载均衡需求,在LVS中定义虚拟服务的…

制作Visual Studio离线安装包

vs2015之后官网就不提供离线安装包了,使用离线安装包就需要自己手动制作一个; 以vs2019为例: 先去官网下载在线安装器 官网下载地址:Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 (microsoft.com) 展开2019的标签…

【C语言】深剖数据在内存中的存储

👦个人主页:Weraphael ✍🏻作者简介:目前正在回炉重造C语言(2023暑假) ✈️专栏:【C语言航路】 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你…

初识react

初识react 第一步就给我出个问题版本太低 https://www.cnblogs.com/gslgb/p/16585233.html https://blog.csdn.net/xiangshiyufengzhong/article/details/124193898 第二个问题 便利生成dom 需要绑定key 不要总想着加冒号这不是vue 第三个问题 我p标签包裹 MapList组件 MapLis…

Redis相关配置(3)

⭐ 作者简介:码上言 ⭐ 代表教程:Spring Boot vue-element 开发个人博客项目实战教程 ⭐专栏内容:个人博客系统 ⭐我的文档网站:http://xyhwh-nav.cn/ 文章目录 Redis相关配置1、units2、Include3、loadmodule 加载模块4、NET…

创意网页模板免费下载,让你的网站与众不同!

今天给大家带来的网站模板素材,网站类型丰富,包含户外旅行、餐饮、个人网站等等,可以学习和参考其中的布局排版和配色。 ⬇⬇⬇点击获取更多设计资源 https://js.design/community?categorydesign&sourcecsdn&planbbqcsdn772 1、设…

【1++的C++初阶】之vector

👍作者主页:进击的1 🤩 专栏链接:【1的C初阶】 文章目录 一,什么是vector?二,构造与析构三,vector迭代器的实现四,vector部分重要接口的实现 一,什么是vector? vector…

使用NVIDIA FX Composer验证多纹理合成效果

最近项目上有一个需求,需要将4张带透明通道纹理合成为一张,并且每张纹理指定一个全局透明度。由于纹理过多,合成效果无法保证,为了减少项目的风险,领导希望我先快速验证一下我们讨论的方法是否能完成项目的要求。因此我…

销售易的12年与七个瞬间

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

ylb-接口5产品详情

总览: 1、service处理(根据产品id ,查询产品信息) 在api模块下service包,ProductService接口添加新方法(根据产品id ,查询产品信息queryById(Integer id)): package …

Python venv 和 virtualenv 虚拟环境的基本使用

1.前言 venv 和 virtualenv 都是搭建虚拟环境的工具,virtualenv 是第三方开源的,而 venv 作为 virtualenv 的一个子集自 Python3.3 开始集成到标准库中,在 virtualenv 的文档中可以看到他们的区别: 没有 app-data 种子方法&#…

Python爬虫——urllib_post请求百度翻译

post请求: post的请求参数,是不会拼接在url后面的,而是需要放在请求对象定制的参数中 post请求的参数需要进行两次编码,第一次urlencode:对字典参数进行Unicode编码转成字符串,第二次encode:将字…

isaac sim添加孔网格

isaac sim仿真和其它仿真实际上一样,对于孔的仿真,是没那么简单的 在此记录一下踩过的坑 1,首先,你需要在soildworks中将你的孔画出来,并导出stl 2,你可以在win10中使用3D画图查看孔的网格,看…

【css】用css样式快速写右上角badge徽标,颜色设置为渐变色

先看效果展示&#xff0c;已公开显示在图片卡片的右上角。 首先是dom代码&#xff1a;需要两个view或者div&#xff0c;public-badge是“已公开”那个矩形&#xff0c;show-signal是右边那个下三角&#xff0c;也就是阴影部分&#xff0c;这样看起来比较有立体感。 <view…

虚拟化技术及实时虚拟化概述

版权声明&#xff1a;本文为本文为博主原创文章&#xff0c;未经本人同意&#xff0c;禁止转载。如有问题&#xff0c;欢迎指正。博客地址&#xff1a;https://www.cnblogs.com/wsg1100/ 文章目录 一、前言二、分时系统三、虚拟化介绍四、虚拟化实现方式及分类模拟器Type2虚拟化…