第六节 面向对象编程(基础部分)

144 阅读8分钟

6.1Java面向对象学习的三条主线

①Java类及类的成员:属性、方法、构造器;代码块、内部类

②面向对象的三大特征:封装性、继承性、多态性、(抽象性)

③其它关键字:this、super、static、final、abstract、interface、package、import等

6.2 面向对象的两个要素

类:对一类事物的描述,是抽象的、概念上的定义

对象:是实际存在的该类事物的每个个体,因而也称为实例(instance)

6.3 设计类,其实就是设计类的成员

属性 = 成员变量 = field = 域、字段

方法 = 成员方法 = 函数 = method

6.4 类和对象的使用

①创建类,设计类的成员

②创建类的对象

③通过“对象.属性”或“对象.方法”调用对象的结构

6.5对象的内存解析

4.png

6.6属性(成员变量)和局部变量

6.6.1相同点

①定义变量的格式:数据类型 变量名 = 变量值

②先声明,后使用

③变量都有其对应的作用域

6.6.2不同点

①在类中声明的位置的不同

属性:直接定义在类的一对{}内

局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量

②关于权限修饰符的不同

属性:可以在声明属性时,指明其权限,使用权限修饰符。

常用的权限修饰符:private、public、缺省、protected

局部变量:不可以使用权限修饰符。

③默认初始化值的情况

属性:类的属性,根据其类型,都有默认初始化值。

整型(byte、short、int、long):0

浮点型(float、double):0.0

字符型(char):0 (或'\u0000')

布尔型(boolean):false

引用数据类型(类、数组、接口):null

局部变量:没有默认初始化值。

意味着,我们在调用局部变量之前,一定要显式赋值。

④在内存中加载的位置

属性:加载到堆空间中 (非static)

局部变量:加载到栈空间

6.7类中方法的声明和使用

6.7.1

方法的声明:权限修饰符 返回值类型 方法名(形参列表){

方法体

}

6.7.2说明

① 关于权限修饰符:默认方法的权限修饰符先都使用public

Java规定的4种权限修饰符:private、public、缺省、protected -->封装性再细说

②返回值类型: 有返回值 vs 没有返回值

如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用

return关键字来返回指定类型的变量或常量:“return 数据”。

如果方法没有返回值,则方法声明时,使用void来表示。通常,没有返回值的方法中,就不需要

使用return.但是,如果使用的话,只能“return;”表示结束此方法的意思。

③方法名:属于标识符,遵循标识符的规则和规范,“见名知意”

④形参列表: 方法可以声明0个,1个,或多个形参。

⑤ 方法体:方法功能的体现。

6.7.3return关键字的使用

1.使用范围:使用在方法体中

2.作用:① 结束方法

② 针对于有返回值类型的方法,使用"return 数据"方法返回所要的数据。

3.注意点:return关键字后面不可以声明执行语句。

6.8匿名对象的使用

6.8.1理解

我们创建的对象,没有显式的赋给一个变量名。即为匿名对象

6.8.2特征

匿名对象只能调用一次。

6.9方法的重载

6.9.1定义

在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。

6.9.2

"两同一不同":同一个类、相同方法名

参数列表不同:参数个数不同,参数类型不同

6.9.3判断是否是重载

跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系!

6.9.4在通过对象调用方法时,如何确定某一个指定的方法

方法名 ---> 参数列表

6.10可变个数形参的方法

6.10.1具体使用

①可变个数形参的格式:数据类型 ... 变量名

② 当调用可变个数形参的方法时,传入的参数个数可以是:0个,1个,2个,。。。

③ 可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载

④ 可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。换句话说,二者不能共存。

⑤ 可变个数形参在方法的形参中,必须声明在末尾

⑥可变个数形参在方法的形参中,最多只能声明一个可变形参。

6.11值传递机制

如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值。

如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值。

6.12面向对象的特征一:封装与隐藏

6.12.1封装性的体现

我们将类的属性xxx私有化(private),同时,提供公共的(public)方法来获取(getXxx)和设置(setXxx)此属性的值

6.12.2封装性的体现,需要权限修饰符来配合
1.Java规定的4种权限(从小到大排列):private、缺省、protectedpublic2.4种权限可以用来修饰类及类的内部结构:属性、方法、构造器、内部类
​
3.具体的,4种权限都可以用来修饰类的内部结构:属性、方法、构造器、内部类

总结封装性:Java提供了4种权限修饰符来修饰类及类的内部结构,体现类及类的内部结构在被调用时的可见性的大小。

6.13类的结构之三:构造器(构造方法)的使用

6.13.1构造器的作用

①.创建对象

②.初始化对象的信息

6.13.2说明

①.如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器

②.定义构造器的格式:权限修饰符 类名(形参列表){}

③.一个类中定义的多个构造器,彼此构成重载

④.一旦我们显式的定义了类的构造器之后,系统就不再提供默认的空参构造器

⑤.一个类中,至少会有一个构造器。

6.14属性赋值的先后顺序

① 默认初始化

② 显式初始化

③ 构造器中初始化

④ 通过"对象.方法" 或 "对象.属性"的方式,赋值

以上操作的先后顺序:① - ② - ③ - ④

6.15JavaBean的定义

类是公共的
有一个无参的公共的构造器
有属性,且有对应的get、set方法

6.16this关键字的使用

6.16.1this可以用来修饰、调用:属性、方法、构造器
6.16.2this修饰属性和方法

this理解为:当前对象 或 当前正在创建的对象

① 在类的方法中,我们可以使用"this.属性"或"this.方法"的方式,调用当前对象属性或方法。但是,

通常情况下,我们都选择省略"this."。特殊情况下,如果方法的形参和类的属性同名时,我们必须显式

的使用"this.变量"的方式,表明此变量是属性,而非形参。

② 在类的构造器中,我们可以使用"this.属性"或"this.方法"的方式,调用当前正在创建的对象属性或方法。

但是,通常情况下,我们都选择省略"this."。特殊情况下,如果构造器的形参和类的属性同名时,我们必须显式

的使用"this.变量"的方式,表明此变量是属性,而非形参。

6.16.3this调用构造器

① 我们在类的构造器中,可以显式的使用"this(形参列表)"方式,调用本类中指定的其他构造器

② 构造器中不能通过"this(形参列表)"方式调用自己

③ 如果一个类中有n个构造器,则最多有 n - 1构造器中使用了"this(形参列表)"

④ 规定:"this(形参列表)"必须声明在当前构造器的首行

⑤ 构造器内部,最多只能声明一个"this(形参列表)",用来调用其他的构造器

6.17package关键字的使用

1.为了更好的实现项目中类的管理,提供包的概念

2.使用package声明类或接口所属的包,声明在源文件的首行

3.包,属于标识符,遵循标识符的命名规则、规范(xxxyyyzzz)、“见名知意”

4.每"."一次,就代表一层文件目录。

6.18import关键字的使用(导入)

①在源文件中显式的使用import结构导入指定包下的类、接口

②声明在包的声明和类的声明之间

③如果需要导入多个结构,则并列写出即可

④可以使用"xxx.*"的方式,表示可以导入xxx包下的所有结构

⑤如果使用的类或接口是java.lang包下定义的,则可以省略import结构

⑥如果使用的类或接口是本包下定义的,则可以省略import结构

⑦如果在源文件中,使用了不同包下的同名的类,则必须至少有一个类需要以全类名的方式显示。