JAVA面向对象三大特征之封装
1. 面向对象思想概述
Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下, 使用Java语言去设计、开发计算机程序。 这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面 向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算 机事件的设计思想。 它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去 操作实现。
举个例子:打扫卫生
- 面向过程:擦玻璃-->扫地-->拖地-->倒垃圾。
- 面向对象:叫来保洁员->保洁员打扫卫生。
特点:
- 面向过程:强调的是我该怎么做,然后按步骤一步步的完成。
- 面向对象:强调的是该让谁来做,怎么做就是对象的事情,这里的对象指的是保洁员。
面向对象和面向过程的区别:
- 面向过程 :面向过程性能比面向对象高。 因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发。但是,面向过程没有面向对象易维护、易复用、易扩展。
- 面向对象 :面向对象易维护、易复用、易扩展。 因为面向对象有封装、继承、多态性的特性,所以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。但是,面向对象性能比面向过程低。
2. 类和对象
面向对象的程序是由类和对象组成的,每个对象都包含对用户公开的特定功能部分和隐藏的实现部分。
什么是类和对象呢?我们看下概念:
- 类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该 类事物。
- 对象:是一类事物的具体体现。对象是类的一个实例,必然具备该类事物的属性和行为。
在JAVA中,类的定义格式为:
public class ClassName {
//成员变量
//成员方法
}
- 定义类:就是定义类的成员,包括成员变量和成员方法。
- 成员变量:和以前定义变量几乎是一样的。只不过位置发生了改变。在类中,方法外。
- 成员方法:和以前定义方法几乎是一样的。
以保洁员为例定义一个类
public class Cleaner {
//成员变量
String name;//姓名
int age;//年龄
//成员方法
//打扫卫生的方法
publicvoid clean() {
System.out.println("清洁卫生");
}
}
对象的使用格式为:
类名 对象名 = new 类名();
对象名.成员变量;
对象名.成员方法();
创建一个姓名为张三的保洁员对象
public static void main(String[] args) {
//创建对象格式:类名 对象名 = new 类名();
Cleaner c = new Cleaner();
//直接输出成员变量值
System.out.println("姓名:"+c.name); //null
System.out.println("年龄:"+c.age); //0
System.out.println("‐‐‐‐‐‐‐‐‐‐");
//给成员变量赋值
c.name = "张三";
c.age = 18;
//再次输出成员变量的值
System.out.println("姓名:"+c.name); //张三
System.out.println("年龄:"+c.age); //18
System.out.println("‐‐‐‐‐‐‐‐‐‐");
//调用成员方法
s.clean(); // "清洁卫生"
}
注意:对象调用方法时,根据对象中方法标记(地址值),去类中寻找方法信息。这样哪怕是多个对象,方法信息 只保存一份,节约内存空间。
3. 封装
3.1 封装概述
面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。 封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的 方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。
3.2 封装的原则
将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。
3.3 封装的步骤
1.使用 private 关键字来修饰成员变量。
以保洁员为例,代码如下:
public class Cleaner {
//成员变量
private String name;//姓名
private int age;//年龄
}
2. 对需要访问的成员变量,提供对应的一对 getXxx 方法 、 setXxx 方法。
public class Cleaner {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return this.age;
}
}
3.4 封装的优化——构造方法
当一个对象被创建时候,构造方法可以用来初始化该对象,给对象的成员变量赋初始值。
构造方法的定义格式
修饰符 构造方法名(参数列表){
// 方法体
}
以保洁员类为例,定义构造方法
public class Cleaner {
private String name;
private int age;
// 无参数构造方法
public Cleaner() {}
// 有参数构造方法
public Cleaner(String name,int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return this.age;
}
}
注意事项
- 如果你不提供构造方法,系统会给出无参数构造方法。
- 如果你提供了构造方法,系统将不再提供无参数构造方法。
- 构造方法是可以重载的,既可以定义参数,也可以不定义参数。
浙公网安备 33010602011771号