第六天(下) 封装和this

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第六天(下) 封装和this相关的知识,希望对你有一定的参考价值。

封装(有时候也叫数据隐藏).是与对象有关的一个重要概念,从形式上来看,封装是将数据和行为组合在一个包中,并对 对象的使用者隐藏了数据的实现方式.

封装的关键在于绝不能让类中的方法直接访问其他类的数据,程序仅通过对象的方法与对象数据 进行交互.封装给予了对象黑盒的特性.这是提高重用性和可靠性的关键.

封装的表现:方法就是一个最基本封装体,类也是一个封装体

封装的好处:

1提高的代码的复用性.

2隐藏了实现细节,还要对外提供可以访问的方式,便于调用者的使用,(封装的核心之一,或者也可以说是封装 概念)

3提高了安全性.

4 可以对成语变量进行更精准的控制(在set方法中加入if语句等)

封装的举例: (机箱)

    一台电脑有cpu,主板,显卡等部件组成,将这些部件组合在一起就可以用电脑了,但是这些东西都散落在外面,很容易造成不安全的因素,于是,就用机箱把所有东西装在里面,在机箱上留下插口等.

    机箱就隐藏了各种部件的细节,对外提供了插口和开关等访问内部细节的方式.

Java封装的实现步骤:

    1修改属性的可见性来限制对属性的访问(一般限制为private) 将name和age的属性设置为私有,只有本类才可以访问,其他类都访问不了,从而实现了信息的隐藏.

    2对每个值属性提供对外的公共方法访问,也就是创建一对赋值取值的方法,用于对私有属性的访问.

    

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,但有个严重的问题Person里的属性可以被随意的访问和更改,这不符合实际标注

这时候就需要一个关键字也就是修饰符private(私有,权限修饰符) 只要将类的属性私有化,就无法直接访问.

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

属性被私有了,错误的值不能赋了,可是正确的值也赋值不了,

根据之前学习的封装的原理,隐藏后,还需要提供访问方式.

一般对成员属性的访问方法赋值(set)取值(get),对私有的变量提供相应的访问方式setXxx getXxx 属性名的首字母大写

class Person {
    // 私有成员变量
    private int age;
    private String name;
    // 对外提供设置成员变量的方法
    public void setAge(int a) {
        age = a;
    }
    // 对外提供访问成员变量的方法
    public void getAge() {
        return age;
    }
}

我们现在把属性隐藏了,也通过对外的方法实现了赋值取值,但是我们还是不能阻止 他赋予错误的值.

我们可以在set方法中添加if语句来增加限制

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

总结:类中不需要对外提供的内容都私有化,包括属性和方法 以后再描述事物,属性都私有化,并提供set get方法 

注意:私有只是封装的体现形式,并不是封装就是私有化

this关键字:

(1)this调用本类中的属性,也就是类中的成员变量;

(2)this调用当前对象

(3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。

1)this()调用其他构造方法的语句只能放在构造方法(在其他普通方法里是不行的)的首行;

2)在使用this调用其他构造方法的时候,至少有一个构造方法是不用this调用的。(必须要有结尾,不能无限期的调用下去,循环递归调用);

(4)对象的比较

this本类的对象引用 那个对象用this this就表示那一个对象  


以上是关于第六天(下) 封装和this的主要内容,如果未能解决你的问题,请参考以下文章

Python基础-第六天-面向对象编程

swift项目第六天:中间发布按钮的封装以及监听点击事件

孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5

JavaScript(第六天)

第六天

第六天