Java(十八)封装

35 阅读2分钟

封装,面向对象的三大特征之一。

那什么是封装呢?

封装是指隐藏对象的属性和现实细节,仅对外提供公共的访问方式

那如何隐藏对象的属性呢?

想要隐藏对象的属性,只需要在定义属性的前面加上一个关键字private即可。

那么如何提供公共的访问方式呢?

Java为我们提供了get和set的方式。

 

一:private关键字

Private是一个修饰符,代表私有的意思,可以修饰成员变量和成员方法以及构造方法

被private关键字修饰的成员变量和成员方法只能在本类中使用,不能在其他类中使用。

下面我们举个小例子:

/**
 * 人类
 */
class person
{
    private int i = 1;
    public void drink()
    {
        System.out.println("父类喝水");
    }
}
/**
 * 学生类
 */
class student extends person
{
    private int i = 2;
    @Override
    public void drink()
    {
        int i = 3;
        System.out.println(i);
        System.out.println(this.i);
        System.out.println(super.i);
    }
}

Student类中使用super关键字调用父类person类的私有成员变量i的地方是编译报错的。

因为,person类中的成员变量i是私有的。

 

二:this关键字

This关键字代表对象的引用,那个对象调用this所在的方法,this就代表哪个对象

This可以解决局部变量隐藏成员变量的问题

 

三:get和set方法

总结一下上边说的,我们类中的成员变量,要封装起来,也就是使用private来修饰,但是我们还是要给外界调用成员变量的方法。

Java为我们提供了get和set方法。

这个是有快捷键的,不用我们自己写,那我们重写一下上一篇继承中最后输出3/2/1的样例:

public class T07 {
    public static void main(String[] args) {
        student stu = new student();
        stu.drink();
    }
}
 
/**
 * 人类
 */
class person
{
    /**
     * 私有变量i
     */
    private int i = 1;
    /**
     * i取值
     * @return
     */
    public int getI() {
        return i;
    }
    /**
     * i 赋值
     * @param i
     */
    public void setI(int i) {
        this.i = i;
    }
    /**
     * 喝水方法
     */
    public void drink()
    {
        System.out.println("父类喝水");
    }
}
/**
 * 学生类
 */
class student extends person
{
    /**
     * 私有变量i
     */
    private int i = 2;
    /**
     * i取值
     * @return
     */
    public int getI() {
        return i;
    }
    /**
     * i赋值
     * @return
     */
    public void setI(int i) {
        this.i = i;
    }
    /**
     * 重写喝水方法
     */
    @Override
    public void drink()
    {
        int i = 3;
        System.out.println(i);
        System.out.println(this.i);
        // System.out.println(super.i);
        // 不能直接调用父类的 成员变量i,可以调用获取i变量的方法
        System.out.println(super.getI());
    }
}

 

以上大概就是java封装的基本使用,主要还是成员变量私有,使用get/set方法来获取以及对类的成员变量赋值。

多说一句,这里的get/set方法和C#中的get/set方法类似,但是具体功能略有区别,别搞混了。

 

有好的建议,请在下方输入你的评论。