【JAVA基础】—面向对象(二)

前言

    封装,是面向对象思想的特征之一。面向对象共有三个特征:封装、继承、多态。现在我们一起学习封装。我们将具体功能封装到方法中,或者将方法封装在类中,这些都是封装。方法就是一个最基本封装体,类其实也是一个封装体。

为什么要学习封装?

    1. 提高了代码的复用性
    2. 隐藏了实现细节,还要对外提供可以访问的方式,便于调用者的使用。
    3. 提高了安全性。

什么是封装 ?

封装在生活中的体现

    就拿电脑来说,它是由CPU、主板、显卡、内存、硬盘、电源等部件组成,我们将这些部件组装在一起就可以使用电脑了,如果这些部件都散落在外面,很容易造成危险,于是,使用机箱壳子将这些部件装在里面,并在机箱壳上留下一些插口,我们直接通过外部的插口功能就能使用了。
其实机箱就隐藏了部件设别的细节,对外提供了插口以及开关等访问内部细节的方式。

封装在代码中的体现

    我们在描述人时,会提到人的姓名和年龄这两个属性,用代码体现:

class Person {
    int age;
    String name;
    public void show() {
        System.out.println("age=" + age + ",name" + name);
    }
}

public class PersonDemo {
    public static void main(String[] args) {
        // 创建Person对象
        Person p = new Person();
        p.age = -20; // 给Person对象赋值
        p.name = "我是大白兔";
        p.show(); // 调用Person的show方法
    }
}

    从上面的代码中可以看出,Person中的属性可以任意访问和使用,这样说来是不符合实际需求的。我们在java中使用修饰符private将Person的属性私有起来,被private 修饰的成员只能在当前类中访问,其他类中无法直接访问,但是我们在给年龄赋值的时候也不能赋值,按照前面封装的思想来说,我们将姓名和年龄这两个属性的细节隐藏之后还要提供访问方式,让其他程序可以访问,同时在方法中可以对数据进行验证。
    一般对成员属性的访问动作:赋值(设置 set),取值(获取 get),因此对私有的变量访问的方式可以提供对应的set 或者get 的方法。

class Person {
    // 私有成员变量
    private int age;
    private String name;

    // 对外提供设置成员变量的方法
    public void setAge(int a) {
        // 由于是设置成员变量的值,这里可以加入数据的验证
        if (a < 0 || a > 130) {
            System.out.println(a + "不符合年龄的数据范围");
            return;
        }
        age = a; 
    }

    // 对外提供访问成员变量的方法
    public void getAge() {
        return age;
    }
}

this 关键字

    当方法中出现了局部变量和成员变量的时候,在方法中怎么区分呢?可以在成员变量名前面加上this.来区别成员变量和局部变量。

/**
 * 学生信息类
 */
public class Student {
    private String name; // 姓名
    private int age; // 年龄

    public String getName() {
        return name;
    }

    public void setName(String name) {
        //this.name 中的name 表示类的成员变量,赋值符号右边的name 表示方法中的局部变量
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

    说明:
    this关键字,代表本类对象的引用;
    this 是在方法中使用的,哪个对象调用了该方法, this就代表调用该方法的对象引用。
    this常用来区分同名的成员变量和局部变量

总结

    感谢您的阅读,本次和大家一起学习了封装和this 关键字的一些知识,后面会继续分享面向对象的继承和多态等知识,敬请期待!

猜你喜欢

转载自blog.csdn.net/zt15732625878/article/details/79593383