七、面向对象
优点:
-
隐藏实现细节
-
把一个大型的开发任务,分割成很多小型的(互不影响的)开发任务。
-
把并行开发,变为可能。提高的提高了开发效率。
7.1、基本
-
特性:封装、继承、多态
-
类:具有相同的状态和相同的行为的一组对象的集合
-
用属性表示对象的状态,用方法表示对象的行为
-
类是对象的模板,对象是类的具体实例;类是对多个对象进行综合抽象的结果,是实体对象的概念模型,一个对象就是一个类的实例
7.2、定义类
7.2.1、定义类
定义类就相当于定义了一个新的数据类型,这个数据类型的名称就是类名
- 语法:[访问修饰符] class 类名{ 成员变量声明;成员方法声明 }
- 解析:访问修饰符是可选的
7.2.2、类的属性
对象所拥有的特征
- 语法:[访问修饰符] 数据类型 属性名
- 解析:
- 访问修饰符是可选的
- 除访问修饰符外,其余部分与变量定义相同
7.2.3、类的方法
对象执行操作的行为
7.3、创建和使用对象
7.3.1、创建对象
类的对象可以调用类中的成员。如类的属性、类的方法
创建对象就相当于定义了一个变量,变量名是对象名,变量的类型是被实例化的类
- 语法: 类名 对象名 = new 类名();
- 解析:
- 左边的类名是对象名的数据类型
- 右边的类名是构造方法
- new 类名()是对象
- new是关键字,称为实例化。实例化的过程就是JVM为对象分配内存的过程
7.3.2、使用对象
- 语法:
- 调用对象的属性:对象.属性
- 调用对象的方法:对象.方法名();
类的成员包括属性和方法,也称作成员变量和成员方法
7.4、重载
-
定义:在一个类中定义多个同名的方法,每个方法具有不同的参数类型、参数个数或参数顺序
-
特点:
- 在同一个类
- 参数的个数或类型或顺序不同
- 方法的返回值不能作为方法是否构成重载的依据
-
调用:实参与形参在类型、个数、顺序上一一匹配
-
优点: 可以根据参数的不同,采用不同的实现方法,简化了调用方法的代码
7.5、构造方法
当类创建一个对象时会自动调用该类的构造方法
构造方法:默认构造方法,自定义构造方法
- 定义:为成员变量初始化
- 语法:[访问修饰符] 方法名 ([参数列表]){}
- 解析:
- 构造方法没有返回值
- 构造方法的方法名与类名相同
- 默认构造方法是没有参数的
构造方法同样可以重载,即在同一个类里定义多个重载构造方法
7.6、成员变量和局部变量
-
成员变量:直接定义在类的内部,方法的的外部的变量
-
局部变量:定义在方法内的变量,局部变量在使用时必须初始化
-
成员变量和局部变量区别
- 作用域:局部变量的作用域仅限于定义它的方法,成员变量作用域在整个类内
- 初始值:成员变量没有赋值的话会有默认值,而局部变量使用必须初始化
- 同一个方法不允许有同名的局部变量,不同方法中可以有同名局部变量
- 局部变量可以和成员变量名相同,在使用时局部变量有更高的优先级
7.7、封装
- 将成员变量用private修饰后,其他类就无法访问,如果访问则需要进行封装第二步
- 设置getter/setter方法
- 可以再setter方法内添加条件语句进行赋值限制
7.8、包
包也是一种封装机制
- 作用:
- 存放类
- 防止起名冲突
- 在更广的范围内保护类、数据、方法。根据访问规则,包外的代码能不能访问该类
- 语法:package 包名;
- 解析:
- 包的声明必须是Java源文件中的第一条非注释性语句,一个源文件只能有一个包声明
- 全部小写的ASCII字母,一个*域名com、edu、gov、net、org。通常使用域名倒写
- 导入:import 包名;
7.9、访问修饰符
7.9.1、类的访问修饰符
同一包 | 不同包中 | |
---|---|---|
public | 可以使用 | 可以使用 |
默认(不使用权限修饰符) | 可以使用 | 不能使用 |
7.9.2、类成员的访问修饰符
位置 | public | protected | 默认(不使用) | private |
---|---|---|---|---|
同类访问 | 可 | 可 | 可 | 可 |
同包其他类访问 | 可 | 可 | 可 | 否 |
同包子类访问 | 可 | 可 | 可 | 否 |
不同包子类访问 | 可 | 可 | 否 | 否 |
不同包非子类访问 | 可 | 否 | 否 | 否 |
访问修饰符不能用于方法中声明的变量或形参。因为方法中声明的变量或形参作用域仅限于该方法
7.9.3 、static关键字
n个对象中的某些数据需要这n个对象共用,需要使用static修饰
- 修饰属性
- 使用static修饰的属性称为静态属性或类变量,没有static修饰的属性称为实例变量
- 使用static修饰的属性属于类,不属于具体的某个对象
- 修饰方法
- 使用static修饰的方法称为静态方法或类方法,没有static修饰的属性称为实例方法
- 用类名直接加“.”调用
- 使用static修饰的方法属于类,不属于具体的某个对象
静态方法中不能直接访问实例变量和实例方法
在实例方法中可以直接调用类中定义的静态变量和静态方法
JVM把内存划分为:方法区、堆区、栈区、静态区、常量区
7.10、this的使用
this关键字是对一个对象的默认引用。每个实例方法内部都有一个this引用变量,指向调用这个方法的对象
(1)、使用this调用成员变量,解决成员变量与局部变量的同名冲突
private String name;
public void setName(String name){ this.name=name; 或者 name=name; }
(2)、使用this调用成员方法
public void eat(){}
public void work(){ this.eat();}
(3)、使用this调用重载的构造方法,只能在构造方法中使用,且必须是构造方法中的第一条语句
public void Persion(String name){ this.name=name; }
public void Persion(String name,int age){ this(name); this.age=age; }
因为this是在对象内部代表自身的引用,所以this只能调用实例变量、实例方法和构造方法,不能调用类变量、类方法、局部变量