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