封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
- 封装所解决的问题
通过对象去给成员变量赋值,可以赋值一些非法的数据,比如年龄给赋了一个负数,这显然是不合理的,正确的做法是在赋值之前,先对数据进行判断,如果符合要求就进行赋值,否则就拒绝赋值。
1. private关键字
- 封装之私有成员方法的使用
private关键字使得类中成员变量和成员方法不能通过对象直接调用,这样就实现了如果要给成员变量赋值就必须使用我们定义的校验方法进行赋值。
private:私有的。
可以修饰成员变量和成员方法,被private修饰的成员只能在本类中访问。
- 修饰成员变量
- 修饰成员方法
- 代码详解
class Demo{
private int num =20;
private void show(){
System.out.println("this is num: "+num);
}
//私有的成员方法直接同对象进行调用会报错。被私有修饰了,外界不能直接访问了
public void showfeng(){
show();
}
}
class DemoDemo{
public static void main(String[] args){
Demo demo=new Demo();
demo.showfeng();
}
}
this是当前类的对象引用。简单的记,它就代表当前类的一个对象。谁调用这个方法,在该方法内部的this就代表谁。
this的场景:解决局部变量隐藏成员变量
由于private关键字使得类中的成员变量和成员方法不能被对象调用,所以需要通过类中提高的方法对私有变量进行操作,比如赋值,取值。
- 取值
- 赋值
- 代码解释
class Student {
private String name;
private int age;
public String getName() {
return name; //这里其实是隐含了this
}
public void setName(String name) {
this.name = name; //把传入的值,赋值给当前对象的name变量。
/*
s.age = 22;
这种传统的赋值表示,把值赋值给对象的age变量。
*/
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
class StudentTest2 {
public static void main(String[] args) {
//创建一个对象
Student s1 = new Student();
s1.setName("林青霞");
s1.setAge(27);
System.out.println(s1.getName()+"---"+s1.getAge());
//创建第二个对象
Student s2 = new Student();
s2.setName("刘意");
s2.setAge(30);
System.out.println(s2.getName()+"---"+s2.getAge());
}
}