![55a8e4c2a51a16b8bc03f058248e74d3.png](https://i-blog.csdnimg.cn/blog_migrate/f53480a7cae286ef540aa30439a9b604.jpeg)
在现实生活中,随处可见的事物就是各种不同的“对象”,对象是事物存在的“实体”,如人、汽车等。每个对象我们都可以划分为动态部分与静态部分。静态部分,顾名思义就是固定不会改变的部分,我们可以理解为“属性”,任何对象都具备其自身属性,如人的性别、年龄、身高等属性。动态部分,顾名思义就是会发生变化的部分,我们可以理解为“行为”,比如人的行走、唱歌、睡觉等行为。
类是封装对象的属性与行为的载体,反过来说具有相同属性和行为的一类实体被称为类。例如一个人类,人类封装了所有人的共同属性(性别、年龄)和其具有的行为(行走、唱歌),类就是同一类事物的统称,对象是类的实例。
面向对象
面向对象(Object-Oriented)是现在最为流行的软件设计开发方法,在面向对象中两个最核心的成员就是 类与对象。
相对于面向过程,面向过程指的是面对一个问题的解决方法,以功能实现为主,并不考虑其可维护性、复用性的设计。面向对象的主要是以标准的模块化设计,使用时根据标准进行拼装,面向对象的设计的三个主要特征:封装性、继承性、多态性。
- 封装性:封装是面向对象编程的核心思想,将对象的属性与行为封装起来的载体就是类,类通常对使用者隐藏其具体实现细节,内部操作对外部操作而言不可见,保证了类内部数据结构的完整性,使用者不能轻易直接操纵此数据结构,只能执行 类允许公开的数据,避免了外部对内部数据的影响,提高了程序的可维护性。
- 继承性:子类可以继承父对象的属性(数据)和行为(方法),并可以在现有的基础上进行功能的修改和扩充,类似自然中的物种遗传。
- 多态性:多态指一个类实例的相同方法在不同情形具有不同表现形式(或者可以理解为父对象中的同一个行为能在它的多个子对象中有不同的表现),即同一消息可以根据发送对象(函数调用对象)的不同而采用多种不同的行为方式,例如:同样是 move 方法,鸟调用时是飞翔,马调用时是奔跑。
类与对象
类是对某一个事物共性的产物,对象是一个个具体产物,即“类是对象的模板,而对象是类的实例”。比如,人表示为一个类(人类),并不是一个具体的个体,但如 “张三”则是具体的个体,这个具体个体被称作一个对象。类一般以下两个基本组织单元构成:
- 成员属性:如,不同的人都有年龄、身高、性别等信息,用于描述对象具体特征,对象的属性以成员属性的形式定义。
- 方法(行为):如,一个人可以行走、唱歌、睡觉,用于描述功能,对象的行为以方法的形式定义。
类与对象的定义
在Java中,类是一个独立的结构体,所以使用class 关键字进行定义,在类中主要是由成员属性和方法(行为) 构成。我们使用class 关键字定义类,类的定义的基础语法如下:
![571c54e7336ecb891623d1e6fe59d09f.png](https://i-blog.csdnimg.cn/blog_migrate/4bb21de2bcb15a715bacb571a9d0eb91.jpeg)
定义一个Person类
如下,我们定义了一个Person类,其中包含姓名、身高、年龄3个成员属性(变量),并定义了一个printInfo 方法,实现成员属性的输出。
![0b0ed6b0d410413e5d10a64b94490ea3.png](https://i-blog.csdnimg.cn/blog_migrate/05f536156f59bd8a531b18b123d4cf00.jpeg)
声明并实例化对象
一个类完成定义后,并不能被直接使用,因为它是一个模板,具体的操作必须由具体的实例来执行,由于类数据Java的引用数据类型(类、接口、数组),所以对象的定一个是如下:
![543902e965f6fa329546a54769d587ba.png](https://i-blog.csdnimg.cn/blog_migrate/a36a59ee5942b37632b1d798d52b0c90.jpeg)
因为在Java中引用数据类型时需要进行内存分配的(基础数据类型不涉及内存分配问题),所以在定义时必须通过new 关键字来分配对应的内存空间,之后才可以使用,此过程被称作声明并实例化对象,一个实例化对象则可以使用以下方式进行使用:
- 对象.成员属性:调用类中的成员属性。
- 对象.方法:调用类中的方法。
我们将上述Person 类在进行实例化,并且在未对类中成员属性赋值时,直接调用类中printInfo 方法,然后分别对类中成员属性进行赋值,再次调用printInfo 方法。如下:
![a068824970de2d8ac2c781d0a52a43e5.png](https://i-blog.csdnimg.cn/blog_migrate/7d9d9255ad633d5e1e1c5899fbe6f839.jpeg)
如上,我们通过关键字new 获取Person 类的实例化对象,然后通过实例化对象实现类中属性的赋值和方法调用。需要注意的是,当我们在定义变量时,若不对变量进行赋值,则会使用默认值进行初始化。