二、java之面向对象
面向对象
面向对象编程(Object-Oriented Programming,OOP)
面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据
三大特性:
◆封装
◆◆封装的概念
程序设计要追求“高内聚、低耦合”:
高内聚:类的内部数据操作细节自己完成,不允许外部干涉;
低耦合:仅对外部暴露少量的方法用于使用。
设计程序时我们要隐藏对象内部的复杂性、对外只公开简单的接口。便于外界调用从而提高系统的可扩展性、可维护性。
通俗的说,把该隐藏的隐藏起来,该暴露的暴露出来,这就是封装的设计思想。
在Java中通过权限修饰符关键字公有(public)、私有(private)和受保护(protected)实现封装。
◆◆封装的作用:提高代码的安全性。
保护或者防止代码(数据)被我们无意中破坏。
在面向对象程序设计中数据被看作是一个中心的元素并且和使用它的函数结合的很密切,从而保护它不被其它的函数意外的修改。
◆◆封装的使用

封装的使用情况
1、拒绝直接调用声明字段,保护内部数据,更安全;
2、在编程中可达到缓存的效果,执行效率高;
3、重复调用,避免代码冗余,程序编写效率高。
相关概念
1、private关键字:权限修饰符 (私有的)
2、Get和Set
3、this关键字 表示当前类型当前对象的引用 哪个对象来调用this关键字所在的方法,this就指代哪个对象
在set方法中,this该关键字在见名知意的前提下,用于区分哪个是对象的成员变量,
剩下的一个按照就近原则,就是局部变量。所以在set方法中,使用【this.成员变量的变量名】,一定是成员变量,
没有使用name的变量,就按照就近原则去寻找。
4、构造方法 又叫做构造器或者构造函数,Constructor。(重点)
作用:用于给成员变量赋值
在创建对象的过程中,会自动调用构造方法,等对象创建完毕的时候,对象中的成员变量就已经通过构造方法赋值成功了。
注意:
构造方法不能手动调用,在创建对象的时候由JVM自动调用;
因为一个对象只能被创建一次所以构造方法针对同一个对象只能被调用一次;
构造方法可以重载;
当一个类没有手动提供任何构造方法时,在编译时系统会自动为我们添加一个空参构造。
当我们手动添加了一个任何构造的时候,系统就不会在为我们添加任何构造方法
如果构造方法没有修饰符,也是构造方法,只不过是默认权限而已,方法中的内容无关紧要
◆继承
◆◆继承的概念
使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。继承可以在原有类的基础上,进行功能扩展,创建新的类型。
◆◆继承的作用
1、有效的解决了代码重用的问题,是代码扩展更加灵活
2、从始至终完成的体现了一个应用系统,逻辑更加清晰
3、增加软件的可扩展性,以适应不同的业务需求

◆◆继承必须遵守的规则
1、重写方法和被重写方法必须具有相同的方法名
2、重写方法和被重写方法必须具有相同的参数列表
3、重写方法返回值类型必须和被重写方法的返回值类型相同或为其子类
4、重写方法不能缩小被重写方法的访问权限
◆◆ 方法重载与方法重写
| . | 位置 | 方法名 | 参数表 | 返回值 | 访问修饰符 |
|---|---|---|---|---|---|
| 方法重载 | 同类 | 相同 | 不相同 | 无关 | 无关 |
| 方法重写 | 子类 | 相同 | 相同 | 相同或是其子类 | 不能必父类更严格 |
◆◆继承功能得利弊
继承好处:
实现了数据和方法的共享
提高了代码的复用性(多个类相同的成员可以放到同一个类中)
提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
提高了代码的可扩展性
继承弊端
继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟看变化,削弱了子类的独立性
◆多态
◆◆多态的概念
是指同一行为,具有多个不同表现形式。
通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。
在java中要实现多态,必须要满足如下几个条件,缺一不可:
- 必须在继承体系下
- 子类必须要对父类中方法进行重写
- 通过父类的引用调用重写的方法
◆◆重写
重写(override):也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写, 返回值和形参都不能改变。
即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定 于自己的行为。 也就是说子类能够根据需要实现父类的方法。
规则:
子类在重写父类的方法时,一般必须与父类方法原型一致:返回值类型方法名(参数列表)要完全一致
被重写的方法返回值类型可以不同,但是必须是具有父子关系的
访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方 法就不能声明为 protected
父类被static、private修饰的方法、构造方法都不能被重写。
重写的方法, 可以使用 @Override 注解来显式指定. 有了这个注解能帮我们进行一些合法性校验. 例如不小心 将方法名字拼写错了 (比如写成 aet), 那么此时编译器就会发现父类中没有 aet 方法, 就会编译报错, 提示无法构成重写.

规则:
子类在重写父类的方法时,一般必须与父类方法原型一致: 返回值类型 方法名 (参数列表) 要完全一致
被重写的方法返回值类型可以不同,但是必须是具有父子关系的
访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方 法就不能声明为 protected
父类被static、private修饰的方法、构造方法都不能被重写。
重写的方法, 可以使用 @Override 注解来显式指定. 有了这个注解能帮我们进行一些合法性校验. 例如不小心 将方法名字拼写错了 (比如写成 aet), 那么此时编译器就会发现父 类中没有 aet 方法, 就会编译报错, 提示无法 构成重写.
总结
从认识论角度考虑是先有对象后有类。对象,是具体的事物。类,是抽象的,是对对象的抽象
从代码运行角度考虑是先有类后有对象。类是对象的模板。
类与对象的创建:
使用new关键字创建对象
使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象 进行默认的初始化以及对类中构造器的调用。
类被实例化后会返回一个自己的对象,
类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下俩个特点:
◆1.必须和类的名字相同
◆2.必须没有返回类型,也不能写void
初始化顺序
创建对象的时候,成员变量经历了三个过程:

二、java之面向对象的更多相关文章
- 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- 20145213《Java程序设计》实验二Java面向对象程序设计实验报告
20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...
- 20145206《Java程序设计》实验二Java面向对象程序设计实验报告
20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...
- 20145308刘昊阳 《Java程序设计》实验二 Java面向对象程序设计 实验报告
20145308刘昊阳 <Java程序设计>实验二 Java面向对象程序设计 实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面相对象三要素:封 ...
- 20145113 实验二 Java面向对象程序设计
20145113 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 1.初 ...
- JAVA课程实验报告 实验二 Java面向对象程序设计
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:韩玉琪 学号:20135317 成绩: 指导教师:娄嘉 ...
- 20145225唐振远 实验二 "Java面向对象程序设计"
20145225<Java程序设计> 实验二 Java面向对象程序设计 实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S ...
- 20145208 实验二 Java面向对象程序设计
20145208 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步 ...
- 20162311 实验二 Java面向对象程序设计 实验报告
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- 20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计
20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 ...
随机推荐
- 【Docker】08 部署挂载本地目录的MySQL
拉取MySQL镜像: docker pull mysql:8.0.21 执行挂载运行MySQL容器的命令: docker run -dit \ --name mysql-test \ -p 3306: ...
- Electronics投稿指南
原地址: https://m.peipusci.com/news/10593.html Electronics的自引率先增后减,2023年度为10.3%.
- 《A Palestinian Woman Embraces the Body of Her Niece》—— 4月19日报道 2024年世界新闻摄影大赛结果在荷兰出炉,一张巴勒斯坦妇女在加沙地带抱着被杀害的五岁侄女尸体的照片被评为年度最佳作品
The genocide is not just a matter between the parties involved; it's a concern for all humanity. Gen ...
- 【转载】 vscode如何在最新版本中配置c/c++语言环境中的launch.json和tasks.json?
作者:来知晓链接:https://www.zhihu.com/question/336266287/answer/2144611720来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- python语言绘图:绘制一组正态分布图
代码源自: https://github.com/PacktPublishing/Bayesian-Analysis-with-Python ============================= ...
- [COCI2021-2022#6] Naboj 题解
前言 题目链接:洛谷. 题意简述 给定一张无向图,每条边有个哨兵,初始在边的中间.你可以把某个结点旁边的哨兵全部吸引或远离这个结点.给出最后每个哨兵在边的哪一端,请构造出一种可能的操作方案或报告无解. ...
- 聊一聊 Netty 数据搬运工 ByteBuf 体系的设计与实现
本文基于 Netty 4.1.56.Final 版本进行讨论 时光芿苒,岁月如梭,好久没有给大家更新 Netty 相关的文章了,在断更 Netty 的这段日子里,笔者一直在持续更新 Linux 内存管 ...
- 04-canvas多根线条
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...
- React项目接入代码编辑器aceEditor
不建议去查看aceEditor官方,最好去github查看 安装命令: npm install react-ace 引入包: import AceEditor from 'react-ace'; im ...
- 【Python + yaml】之yaml文件数据驱动(包括DDT驱动)
写自动化测试代码中,数据驱动传递参数比较方便一些,也便于后期维护,下面介绍两种数据驱动: 下面是test.yaml文件: start_HRApp: ip: 127.0.0.1 port: 4723 i ...