2022-10-11

5.1面向对象和面向过程

面向过程是以过程为中心的,遇到问题时,想的是解决问题的步骤,然后用函数把步骤一一实现,最后再依次调用。面向过程更侧重于怎么做,以执行者的角度思考问题,比较适合解决小型问题或底层问题。

面向对象以对象为中心,遇到问题时,想的是需要哪些对象一起来解决问题,然后找到这些对象。并把它们组织在一起,然后取各家之所长来共同解决一个问题。面向对象更侧重于"谁来做",以指挥者的角度思考问题,比较适合解决中大型问题。

面向对象具有三大特性:封装,继承,多态

1,封装性封装是面向对象的核心思想,它有两层含义,一是指把对象的属性和行为看成是一个密不可分的整体,将这两者“封装”在一起(即封装在对象中);另外一层含义指“信息隐藏”,将不想让外界知道的信息隐藏起来。例如,驾校的学员学开车,只需要知道如何操作汽车,无需知道汽车内部是如何工作的。

1.1、封装的好处

提高代码的安全性

1.2、通过代码感受封装

        在以下的代码中,对于属性age来说,加了修饰符private,这样外界对它的访问就受到了限制,现在我还想加上其他的限制条件,但是在属性本身上没有办法再加了,所以我们通过定义方法来进行限制条件的添加。

2,继承性

继承性主要描述的是类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行扩展。例如,有一个汽车类,该类描述了汽车的普通特性和功能。进一步再产生轿车类,而轿车类中不仅应该包含汽车的特性和功能,还应该增加轿车特有的功能,这时,可以让轿车类继承汽车类,在轿车类中单独添加轿车特性和方法就可以了。继承不仅增强了代码的复用性、提高开发效率,还降低了程序产生错误的可能性,为程序的维护以及扩展提供了便利。

继承是Java面向对象最显著的特征之一,继承是从已经存在的类(父类)上面派生出新的类(子类),新派生出的类拥有父类除了private权限之外的所有的属性和方法【当然子类可以通过构造器,或者是通过子类的对象调用get方法来进行操作父类私有的属性】。

2.1继承性的特点:

父类可以有多个子类,但是子类只允许只有一个父类。

可以进行多重继承。

子类继承了父类就会获取直接父类或者是间接父类的方法和属性。

所有的类都是project类的子类(除了个别的)。

减少了代码的冗余,便于功能性的扩展,同时体现了多态性。

子类可以设置自己特有的属性和方法。

父类中私有的方法在子类中依然可以获取到只不过受到封装性的影响不能直接访问。(可以在父类中进行创建对私有方法的封装方法,来间接调用)如:使用extends命令.

3.多态性

多态性指的是在一个类中定义的属性和方法被其它类继承后,它们可以具有不同的数据类型或表现出不同的行为,这使得同一个属性和方法在不同的类中具有不同的语义。例如,当听到“Cut” 这个单词时,理发师的行为是剪发,演员的行为表现是停止表演,不同的对象,所表现的行为是不一样的。多态的特性使程序更抽象、便捷,有助于开发人员设计程序时分组协同开发。

面向对象的三大特性是封装、继承、多态。

多态(polymorphic)的定义:父类引用变量可以指向子类对象,允许不同类的对象可以调用同一个方法,即同一个方法可以根据调用对象的不同而有不同的实现形式。

实现多态的技术是动态绑定(dynamic binding),是指在方法的执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。

多态的作用:消除类型之间的耦合(相互作用,相互影响)关系。

现实中,关于多态的例子有很多。比方说按下 ctrl+F 键这个动作,如果当前在如果当前在 Word 下弹出的就是 Word 的查找和替换功能;在 vscode中弹出的就是 vscode的查找和替换功能。同一个事件在不同的对象中被执行会产生不同的结果。

3.1、多态存在的三个必要条件

    1. 继承;

    2. 重写;

    3. 父类引用指向子类对象。

3.2、多态的特性

可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。

可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。

接口性(interface-ability)。多态是父类通过方法签名,向子类提供了一个共同接口,由子类来完成或者覆盖它而实现的。比如说定义一个父类Shape,规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,就可以完成或者覆盖这两个接口方法。

5.2 类与对象

面向对象的世界观认为世界是由各种具有自己的运动规律和内部状态的对象所组成的,不同对象之间的相互作用和通信构成了完整的现实世界。使用面向对象的编程思想来分析问题需要从以下几个步骤思考。

根据问题需要,找到问题所针对的现实世界的实体。

从实体中寻找与解决问题相关的属性和功能,这些属性和功能就形成了概念世界的抽象实体。

把抽象的实体用计算机语言进行描述,形成计算机世界的类,即借助程序语言,把类构造成计算机能够识别和处理的数据结构。

类实例化成计算机世界中的对象,对象是计算机世界中解决问题的最终工具。

5.2.1 类与对象的关系

在面向对象中,为了做到让程序对事物的描述与事物在现实中的形态保持一致,面向对象思想中提出了两个概念,即类和对象。在Java程序中类和对象是最基本、最重要的单元。类表示某类群体的一些基本特征抽象,对象表示一个个具体的事物。类是抽象的,对象是具体的,类相当于创建对象的蓝图。面向对象的程序实现需要通过类创建对应的实例化对象,来对应客观世界中的实体。

例如,在现实生活中,学生就可以表示为一个类,而一个具体的学生,就可以称为对象。一个具体的学生会有自己的姓名和年龄等信息,这些信息在面向对象的概念中称为属性;学生可以看书和打篮球,而看书和打篮球这些行为在类中就称为方法。

类是蓝图 ,对象是具体

5.2.2、类与对象的关系

        (1)类是对一类事物的描述,是抽象的

        (2)对象是一类事物的实例,是具体的

        (3)类是对象的模板,对象是类的实体

5.2.3、类的定义

        (1)成员变量(属性)

                成员方法(行为)【要把static省掉,变成public void eat(){ }】

        (2)注意事项:

                A.成员变量是直接定义在类当中的,在方法的外面

                B.成员方法不要写static关键字

通常情况下,一个类并不能直接使用,需要根据一个类创建一个对象才能使用

        (1)导包:也就是指出需要使用的类在什么位置

                import 包名称 . 类名称;

                对于同一个包下的情况,可以省略导包语句不写

        (2)创建:格式

                类名称 对象名=new 类名称();

        (3)使用:分为两种情况:

                使用成员变量:对象名 . 成员变量名

                使用成员方法:对象名 .  成员方法名(参数)

        (4)注意事项:

                如果成员变量没有进行赋值那么将会有一个默认值,规则和数组一样

        (5)压栈:先来的方法在最下面后来的在上面

六,

        (1)可以使用对象类型作为方法的参数

        (2)可以使用对象类型作为方法的返回值

                        phone two=getphone()他的值从getone的返回值当中接收

                        当使用一个对象类型作为返回值时,返回值就是对象的地址值

你可能感兴趣的:(2022-10-11)