面向对象

面向对象编程(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中要实现多态,必须要满足如下几个条件,缺一不可:

  1. 必须在继承体系下
  2. 子类必须要对父类中方法进行重写
  3. 通过父类的引用调用重写的方法

◆◆重写

    重写(override):也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写, 返回值和形参都不能改变。

即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定 于自己的行为。 也就是说子类能够根据需要实现父类的方法。

规则:

子类在重写父类的方法时,一般必须与父类方法原型一致:返回值类型方法名(参数列表)要完全一致

被重写的方法返回值类型可以不同,但是必须是具有父子关系的

访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方 法就不能声明为 protected

父类被static、private修饰的方法、构造方法都不能被重写。

重写的方法, 可以使用 @Override 注解来显式指定. 有了这个注解能帮我们进行一些合法性校验. 例如不小心 将方法名字拼写错了 (比如写成 aet), 那么此时编译器就会发现父类中没有 aet 方法, 就会编译报错, 提示无法构成重写.

规则:
子类在重写父类的方法时,一般必须与父类方法原型一致: 返回值类型 方法名 (参数列表) 要完全一致
被重写的方法返回值类型可以不同,但是必须是具有父子关系的
访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方 法就不能声明为 protected
父类被static、private修饰的方法、构造方法都不能被重写。
重写的方法, 可以使用 @Override 注解来显式指定. 有了这个注解能帮我们进行一些合法性校验. 例如不小心 将方法名字拼写错了 (比如写成 aet), 那么此时编译器就会发现父 类中没有 aet 方法, 就会编译报错, 提示无法 构成重写.

总结

从认识论角度考虑是先有对象后有类。对象,是具体的事物。类,是抽象的,是对对象的抽象

从代码运行角度考虑是先有类后有对象。类是对象的模板。

类与对象的创建:

使用new关键字创建对象

使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象 进行默认的初始化以及对类中构造器的调用。

类被实例化后会返回一个自己的对象,

类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下俩个特点:

◆1.必须和类的名字相同

◆2.必须没有返回类型,也不能写void

初始化顺序

创建对象的时候,成员变量经历了三个过程:

二、java之面向对象的更多相关文章

  1. 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  2. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  3. 20145206《Java程序设计》实验二Java面向对象程序设计实验报告

    20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

  4. 20145308刘昊阳 《Java程序设计》实验二 Java面向对象程序设计 实验报告

    20145308刘昊阳 <Java程序设计>实验二 Java面向对象程序设计 实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面相对象三要素:封 ...

  5. 20145113 实验二 Java面向对象程序设计

    20145113 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 1.初 ...

  6. JAVA课程实验报告 实验二 Java面向对象程序设计

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

  7. 20145225唐振远 实验二 "Java面向对象程序设计"

    20145225<Java程序设计> 实验二 Java面向对象程序设计 实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S ...

  8. 20145208 实验二 Java面向对象程序设计

    20145208 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步 ...

  9. 20162311 实验二 Java面向对象程序设计 实验报告

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  10. 20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计

    20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 ...

随机推荐

  1. 关于英语的语言规范问题——美式英语、英式英语和中式英语(Chinese English)到底哪个才是正宗 —— 中式英语才是英语世界的未来

    因为日常生成生活中总是会使用英语进行阅读.写作.学习和交流表达,由于小的时候是学传统正宗英语(英式英语),后来长大后因为美国实力强又开始学这个时候的正宗英语(美式英语),但是由于个人的能力问题(农村娃 ...

  2. 读博期间的宿舍 && 行李打包 —— 大连开发区校区

    =============================================

  3. 2023.4.12.汇报.pptx

    6月份汇报想法    8月份写论文 ==========================================================

  4. 2023年3月份至2024年3月份CCF会议情况——人工智能领域

    April 2, 2023:          https://2023.ecmlpkdd.org/submissions/key-dates-deadlines/ ECML-PKDD (Europe ...

  5. nvme硬盘的断电保护是否有用,是噱头、智商税还是真的有需要?购买DOCKCASE智能M2固态硬盘盒10秒保护

    最近在某东上买了一个10秒断电保护的nvme硬盘,其实对于这个断电保护有用没有用我是不懂的,也是不care的,买这个硬盘盒主要就是为了这个屏幕去的,不过东西到手后我就开始思考这个断电保护到底有用没有用 ...

  6. 构建无服务器数仓(三 )EMR Serverless 操作要点、优化以及开放集成测试

    引言 在数据驱动的世界中,企业正在寻求可靠且高性能的解决方案来管理其不断增长的数据需求.本系列博客从一个重视数据安全和合规性的 B2C 金融科技客户的角度来讨论云上云下混合部署的情况下如何利用亚马逊云 ...

  7. 新晋 Committer!来自复旦大学的帅哥一枚

    点亮Star️ · 支持我们 https://github.com/apache/dolphinscheduler 最近,社区星力量又迎来一位新晋 Committer,这次是来自复旦大学研究生在读的王 ...

  8. Git/Github的基本操作

    由于我之前已经安装好了Git,然后这里就不再叙述之前的相关创建账户的步骤了.直接记录一下如何在本地创建一个项目,并上传到github上面. 1.打开github官网,点击New Repository, ...

  9. Linux统计文件目录下文件的数目命令

    Linux下有三个命令:ls.grep.wc.通过这三个命令的组合可以统计目录下文件及文件夹的个数. 1.ls -l | grep "^-" | wc -l:统计当前目录下文件的个 ...

  10. Java静态相关问题

    问题1: public class Demo01_StaticTest { private static Demo01_StaticTest st = new Demo01_StaticTest(); ...