封装,面向对象的三大特征之一。
那什么是封装呢?
封装是指隐藏对象的属性和现实细节,仅对外提供公共的访问方式
那如何隐藏对象的属性呢?
想要隐藏对象的属性,只需要在定义属性的前面加上一个关键字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方法类似,但是具体功能略有区别,别搞混了。
有好的建议,请在下方输入你的评论。