第4章 类与对象
4.1.3 面对对象语言
➊封装性
❷继承
❸多态
4.2 类
4.2.1 类声明
class People{
...
}
4.2.2 类体
类的目的是抽象出一类事物共有的属性和行为
●变量的声明:用来存储属性的值(体现对象的属性)。
●方法的定义:方法可以对类中声明的变量进行操作,既给出算法。
4.2.3成员变量
➊成员变量的类型
成员变量的类型可以JAVA 中向任何一种数据类型,包括基本类型:整型,浮点型、特型、逻辑类型、引用类型;数组、对象和接口
❷成员变量的有效范围
成员变量在整个类内都有效
❸编程风格
(1)一行只声明一个变量
(2)变量的名字除了符合标识符规定外,名字的首单同时音字时使用小写,如果由多个单词组成,从第二个单词开始的其他单词首字母使用大写
(3)变量名字见名知意
4.2.4 方法
方法头{
方法体的内容}
注:如果局部变量和成员变量的名字相同,那么成员变量被隐藏。
局部变量没有默认值
4.3构造方法与对象的建造
4.3.1构造方法
构造方法是类中的一种特殊方法,当程序用类创建对象时遇使用它的构造方法。类中的构造方法的名字必须与它所在的类的名字完全相同,而且没有类型。允许在一个类中编写若干个构造方法,但必须保证它们的参数不同,参数不同是指:参数的个数不同,或参数个数相同,但参数列表中对应的某个参数的类型不同。
需要注意的是, 如果类中没有编写构造方法,系统会默认该类只有一个构造方法,该默认的构造方法是无参数的,且方法体中没有语句。
➊默认构造方法与自定义构造方法
❷构造方法没有类型
4.3.2 创建对象
➊对象的声明
一般格式:
类的名字 对象名字;
例如:Lader lader;
❷为声明的对象分配变量
使用 new运算符和类的构造方法为声明的对象分配变量,即创建对象。如果类中没有构造方法,系统会调用默认的构造方法,默认的构造方法是无参数的,且方法体中没有语句。
❸对象的内存模型
(1)声明对象的内存模型
(2)为对象分配变量后的内存模型
(3)创建多个不同的对象
4.3.3使用对象
➊对象操作自己流变量
❷对象调用类中的方法
❸体现封装
4.3.4对象的引用和实体
(1)避免使用空对象
(2)一个类的声明的两个对象如果具有相同的引用,二者就具备相同的变量
(3)一个类的声明的两个对象如果具有相同的引用,二者就具备完全相同的实体,系统就会释放多余内存。
4.5 参数传值(不影响原件)
4.5.4 可变参数(使用...表示)
4.6 对象的组合
4.6.1组合与复用
如果一个对象a组合了对象b.那么对象a就可以委托对象b调用其方法组合的方式复用对象b的方法。
通过组合对象来复用方法有以下特点。
(D通过组合对象来复用方法也称“黑盒”复用,因为当前对象只能委托所包含的对象调用其方法,这样一来,当前对象对所包含的对象的方法的细节(算法的细节)是一无所知的。
(2)当前对象随时可以更换所包含的对象,即对象与所包含的对象属于弱耦合关系。
4.6.2 类的关联关系和依赖关系的 UML图
➊关联关系
如果A类中的成员变量是用B类声明的对象,那么A和B的关系是关联关系,称A类的对象关联于B类的对象或A类的对象组合了B类的对象。
❷依赖关系
如果A类中某个方法的参数是用B类声明的对象或某个方法返回的数据类型是B类对象,那么A和B的关系是依赖关系,称A依赖于B.
4.7实例成员与类成员
4.7.1 实例变量与 类变量(static 修饰)
区别: ➊不同对象的实例变量互不相同
❷所有对象共享类变量
❸通过类名直接访问类变量
4.7.3实例方法与类方法
区别: ➊对象调用实例方法
❷类名调用类方法
4.8方法重载(多态性)
要求: ➊参数个数不同
❷参数个数相同,类型不同
4.9 this关键字
(1)构造方法中代表对象
(2)实例方法中代表当前对象
4.10包(package)
4.11import语句(引入库/自定义中的的类)
4.12
➊不能用protected和private修饰类。
❷访问限制修饰符按访问权限从高到低的排列顺序是public(公有)、 protecte(保护)、友好的、private(私有)。
4.18 小结
(I)类是组成Java源文件的基本元素,一个源文件是由若干个类组成的。(2)类体可以有两种重要的成员:成员变量和方法。
(3)成员变量分为实例变量和类变量。类变量被该类的所有对象共享,不同对象的实例变量互不相同。
(4)除构造方法外,其他方法分为实例方法和类方法。类方法不仅可以由该类的对象调用,也可以用类名调用:而实例方法必须由对象来调用。
(5) 实例方法既可以操作实例变量也可以操作类变量,当对象调用实例方法时,方法中的成员变量就是指分配给该对象的成员变量,其中的实例变量和其他对象的不相同,即占有不同的内存空间:而类变量和其他对象的相同,即占有相同的内存空间。类方法只能操作类变量,当对象调用类方法时,方法中的成员变量一定都是类变量,也就是说,该对象和所有的对象共享类变量。
(6) 通过对象的组合可以实现方法复用。
(7)在编写Java源文件时,可以使用import语句引入有包名的类。
(8)对象访问自己的变量以及调用方法受访问权限的限制。