JavaSE:抽象

一,抽象是什么,抽象和面向对象有什么关系

抽象,个人理解,就是抽象的意思

我们都知道面向对象的四大特征:封装,继承,多态,抽象

为什么抽象是面向对象的特征之一,抽象和面向对象有什么关系

这个东西比较复杂,我自己的水平也很浅,下面说说自己的个人理解

面向对象的诞生

面向对象之前,我们操作内存中的同名变量,动来动去都是同一份;

有了面向对象之后,我们操作的数据被不同对象各自的内存空间分割开,不是同一份。

面向过程

函数从类当中获取并操作数据

不同的函数使用的变量,是内存当中的同一份

面向对象

方法从对象当中获取并操作数据

不同对象的相同方法调用的相同变量,来源于方法区类信息的多份拷贝,

在堆内存中分别属于不同的对象,不是同一份

从内存结构的角度来看,面向对象与面向过程,最大的进步就是内存中数据访问的解耦


public class Person {private int age;private String name;public Person(int age, String name) {super();this.age = age;this.name = name;}public Person() {}public static void main(String[] args) {Person p1 = new Person(17,"樱岛麻衣");Person p2 = new Person(16,"梓川咲太");}}

继承与抽象

Java的继承机制,其实就是对现实世界事物之间关系的一种归纳总结

当这种总结是具体而准确的时候,就是单纯的继承

比如Animal类,子类Dog和Cat,显然都具有年龄(age)属性,具有移动(move())方法,所以

这些归纳总结出来的共有的属性,就写在了父类Animal当中,实现了代码和逻辑的复用;

但是,当这种总结继承不能非常具体和准确时,就变成了抽象

比如动物繁衍,单细胞生物就是直接分裂,多细胞生物,有的卵生,有的胎生,等等等等……

繁衍显然是动物拥有的方法,但是又没办法写的那么清楚,最终就变成了抽象方法

重写与抽象的区别(个人理解)

有人说,重写方法不就可以了吗,为什么要专门定义抽象?

一,逻辑关系不同

抽象类当中的抽象方法,只定义方法,不写明实现,需要等待子类实现,明显是从无到有的一种逻辑关系。

而重写,更像是一种增强,父类不需要继承,就可以拥有自定义实现的方法,没有子类也可以

二,实际含义不同

抽象是一套组合拳,不光是方法,就连类也变成了抽象的类,这里抽象的含义主要指事物的本质,因为在单继承环境下,本质只可能有一个

抽象类本身不能实例化也印证了这一点,“本质”就是抽象的,不能映射成现实的对象;

而重写的含义更像是一种“中间阶段”,实实在在的实体类,映射成现实的对象,并没有接近事物的本质

面向对象和抽象的关系

面向对象就是把现实问题抽象为对象,通过调用每个对象的属性或功能去解决问题。

不存在多个对象,这种不同对象的不同实现也就无从定义

这种多个对象同时存在的功能的实现,依赖于内存中数据访问的解耦

  1. 解耦之后,我们通过继承将代码复用,同时又恢复了耦合,
  2. 为了将这部分死灰复燃的耦合给解耦掉,同时依然做到代码复用,我们发明了多态(一个父类对象可以接收任意一种子类的对象,将子类方法与子类类型解耦)
  3. 我们发现实际继承中,出现了难以具象化构建的情况,于是出现了抽象

推荐阅读

Java编程最佳实践之多态 - 阿里云开发者社区

抽象的使用

abstract修饰的类被称为抽象类

abstract修饰的方法被称为抽象方法

  1. 抽象类当中的抽象方法不能实现
  2. 如果有类继承了抽象类,那么一定要重写并实现这个抽象方法
  3. 抽象类才能有抽象方法,普通类不能有抽象方法
  4. 抽象类可以有非抽象的普通方法,类的普通方法必须实现;子类不会被强制要求重写当前抽象类的普通方法
  5. 抽象类不能创建对象,但是可以使用多态
  6. final不能与abstract同时用,因为两者概念冲突(final修饰类表示基类,基类不能被继承,而抽象类又需要继承;只有子类继承,创建子类对象,才能执行自己的方法)
  7. abstract不能与private同时修饰抽象方法,因为abstract表示需要子类重写,而private又屏蔽了子类的访问,概念冲突(abstract方法默认是public的)
  8. 抽象方法不能使用static,因为static方法针对类层次,类内共享;abstract方法只有继承之后创建子类对象,才能被执行,属于对象层次
  9. 子类不想重写实现父类的抽象方法,这个子类必须也是抽象类
  10. 抽象类可以有构造方法,但是不能实例化,构造器的作用是多态创建抽象类对象的时候,先初始化抽象父类,也就是在new子类构造器之前,先new 父类构造器

面试题

抽象类一定是一个父类吗?

答案:是的,因为需要子类覆盖其方法后,才可以对子类实例化

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

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

相关文章

【ESP32入门实战】初识ESP32

【ESP32入门实战】初识ESP32 文章目录 【ESP32入门实战】初识ESP32👨‍🏫前言【写作缘由】🧑‍🎓ESP32介绍👩‍💻ESP32-WROOM-32👩‍💻ESP32的组成部分 👨‍&#x1f3eb…

记内网http洪水攻击,导致网页无法访问一事

事由 最近两日,部分同事在访问税纪云平台时,登录跳转页面频繁转圈、要么就是出现无法连接的错误提示。 无法访问此页面 已重置连接。 请尝试: 检查连接检查代理和防火墙运行 Windows 网络诊断经过以下几方面的排查,无果。 后续通过检查…

4月23号总结

java实现发送邮件 在做聊天室项目的时候&#xff0c;由于需要发送邮箱验证码&#xff0c;所以自己查找了这方面的内容。 首先需要在Maven里面依赖 <dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><versio…

冯喜运:4.25黄金原油上演过山车走势附操作建议

【黄金消息面分析】&#xff1a;周四&#xff08;4月25日&#xff09;亚洲时段&#xff0c;现货黄金窄幅震荡&#xff0c;目前交投于2320美元/盎司附近。金价周三企稳在2300关口上方&#xff0c;收报2315.80美元/盎司&#xff0c;中东紧张局势导致的风险溢价有所缓和&#xff0…

数据类型与变量(Java)

数据类型与变量&#xff08;Java&#xff09; 字面常量数据类型变量变量概念整型变量整型变量长整型变量短整型变量字节型变量 浮点型变量双精度浮点型单精度浮点型 字符型变量布尔型变量类型转换自动类型转换(隐式)强制类型转换(显式) 类型提升 字面常量 常量&#xff1a;常量…

AI预测体彩排列3第2套算法实战化测试第3弹2024年4月25日第3次测试

今天继续进行新算法的测试&#xff0c;今天是第3次测试。好了&#xff0c;废话不多说了&#xff0c;直接上图上结果。 2024年4月25日体彩排3预测结果 6码定位方案如下&#xff1a; 百位&#xff1a;4、5、3、6、1、0 十位&#xff1a;6、5、4、3、1、0 个位&#xff1a;6、2、7…

24二战上岸北邮计算机经验贴(初试+复试超详细)

个人情况介绍 我本科就读于南方的一所211&#xff0c;学的专业是网络工程。学习成绩在班级里是中等水平&#xff0c;挂了两门课。之前专业课学得不仔细&#xff0c;因此考研备考相当于在学新知识。我是二战上岸的&#xff0c;两次都是报考的是北邮计算机科学与技术&#xff08…

ASP.NET基于WEB的选课系统

摘要 设计本系统的目的是对选课信息进行管理。学生选课系统维护模块主要完成的是系统管理与维护功能。课题研究过程中&#xff0c;首先对系统管理模块进行了详尽的需求分析&#xff0c;经分析得到系统管理模块主要完成如下的功能&#xff1a;用户基本信息、选课信息的录入,查看…

【图论 单源最短路】100276. 最短路径中的边

本文时间知识点 单源最短路 图论知识汇总 LeetCode100276. 最短路径中的边 给你一个 n 个节点的无向带权图&#xff0c;节点编号为 0 到 n - 1 。图中总共有 m 条边&#xff0c;用二维数组 edges 表示&#xff0c;其中 edges[i] [ai, bi, wi] 表示节点 ai 和 bi 之间有一条…

Visual Studio调试C/C++指南

1. 前言 Visual Studio&#xff08;VS&#xff09;是微软开发的一款集成开发环境(IDE)软件&#xff0c;支持C/C、C#、VB、Python等开发语言&#xff0c;开发桌面、Web等应用程序。VS功能极其强大&#xff0c;使用极其便利&#xff0c;用户数量最多&#xff0c;被誉为"宇宙…

JDK的安装和配置

这里写自定义目录标题 1.Java 开发工具包在上方已关联资源下载使用2.JAVA_HOME3.CLASSPATH4.PATH5.包内含有visualvm 1.Java 开发工具包在上方已关联资源下载使用 2.JAVA_HOME JAVA_HOME C:\Program Files\Java\jdk1.8.0_1313.CLASSPATH CLASSPATH .;%JAVA_HOME%\lib\dt.jar…

5月计算机各省报名时间汇总报名流程

&#x1f4e3;5月有5省可进行计算机报名 天津&#xff1a;5月6日-5月10日 福建&#xff1a;5月6日9:00-5月12日17:00 广西&#xff1a;5月6日9:00-5月12日23:55 重庆&#xff1a;5月6日9:00-5月12日24:00 西藏&#xff1a;预计5月6日-12日 &#x1f50d;计算机等级考试报…

花粉过敏人群或超2亿?约克VRF中央空调助你健康鲜呼吸

“一朝春雨落,十里桃花开”,暖春、微风、阳光、花香……充满着生机的春天让人心情愉悦,然而对于易过敏人群来说却是“苦不堪言”,经常出现眼圈发红、发痒、睁不开,每天都在“流泪”中度过,同时伴随着咳嗽、打喷嚏、流鼻涕、鼻塞等症状,皮肤也可能会出现红疹、瘙痒等症状。 如何…

在Linux安装mysql

由于大多数开发&#xff0c;测试活动都是在linux中进行的&#xff0c;所以建议先学linux&#xff0c;可以看看下面这个文章&#xff1a; Linux命令超详细介绍-CSDN博客 1、先去下载mysql的linux安装包&#xff1a;MySQL :: Download MySQL Community Server (Archived Versio…

第十五届蓝桥杯省赛第二场C/C++B组G题【最强小队】题解

20pts 枚举所有可能的左端点、右端点&#xff0c;时间复杂度 O ( n 2 ) O(n^2) O(n2)。 对于每个区间进行遍历检测&#xff0c;时间复杂度 O ( n 3 ) O(n^3) O(n3)。 100pts 由于数据范围为 1 0 5 10^5 105&#xff0c;所以肯定只能进行一次枚举。 我们尝试枚举右端点&…

中小型企业网络实战topo

1、设备命名&#xff0c;务必按照规范进行命名规划&#xff1b; 2、子网划分&#xff0c;申请到了公网地址段&#xff0c;201.1.1.0/24&#xff0c;根据公司的实际情况&#xff0c;合理规划拓扑需要的公网地址&#xff0c; 做到合理规划不浪费&#xff1b; 3、子网划分&a…

ZooKeeper设置监听器

ZooKeeper设置监听器&#xff0c;通过getData()/getChildern()/xists()方法。 步骤&#xff1a; 1.创建监听器&#xff1a;创建一个实现Watcher接口的类&#xff0c;实现process()方法。这个方法会在ZooKeeper向客户端发送一个Watcher事件通知的时候被调用。 2.注册监听器&…

k-均值聚类

K均值聚类&#xff08;K-means clustering&#xff09;是一种常用的无监督学习方法&#xff0c;用于将一组数据点划分为K个簇&#xff08;cluster&#xff09;。 它的目标是将相似的数据点归到同一个簇中&#xff0c;同时使得不同簇之间的数据点尽可能不相似。K均值聚类算法的…

数据库MySQL的初级基础操作

文章目录 1. 介绍2. 数据库相关概念3. 启动4. 数据模型5. SQL6. DDL数据库DDL-表操作DDL-表操作-数据类型DDL-表操作-修改DDL-表操作-删除 7. 图形化界面工具DataGrip8. DML(数据操作语言)DML-添加数据DML-修改数据 9. DQL&#xff08;数据查询语言&#xff09;基本查询条件查询…

第十五届蓝桥杯省赛第二场C/C++B组F题【狡兔k窟】题解(AC)

题意分析 有一个 n n n 个点&#xff0c; n − 1 n-1 n−1 条边的无向图&#xff0c;边权均为 1 1 1。 每个点隶属于一个集合&#xff0c;同一个集合的点可以互相传送。 给定 m m m 个询问&#xff0c;求 x , y x, y x,y 的最短距离。 最短路解法 步骤&#xff1a; 建…