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;
    }
}

注意事项

  1. 如果你不提供构造方法,系统会给出无参数构造方法。
  2. 如果你提供了构造方法,系统将不再提供无参数构造方法。
  3. 构造方法是可以重载的,既可以定义参数,也可以不定义参数。
posted @ 2020-11-01 21:07  渺渺孤烟起  阅读(76)  评论(0)    收藏  举报