一:封装和隐藏
1.封装的引入
:当我们创建一个对象以后,我们就可以通过“对象.属性”的方式,对对象向的属性进行赋值。这里,赋值操作要收到属性的数据类型和存储范围的制约。除此之外,没有其他制约条件。但是,在实际问题中,我们往往需要给属性赋值加入额外的限制条件。这个条件就不能再属性声明时体现,我们只能通过方法进行限制条件的添加(比如setAge())。同时,我们需要避免用户再使用“随想.属性”的方式对属性进行赋值。则需要将属性声明为私有的(private)---->此时,针对属性就体现了封装性。其实私有方法也体现了封装性,还有单例模式等。
问题引入:我们在类中定义一个属性private name,编译器知道你有这个属性,有不等于能用。因为是人家私有的。比如路上看见一个美女,但是不等于你有,因为那是别人的女朋友。你能看得到的和你是否拥有是两回事。比如你对类中某一个属性的private修饰去进行私有封装。
2.封装是什么:
面向对象编程语言对客观世界的模拟。
(客观世界指的是对象的状态信息都被隐藏在对象内部外界无法直接操作和修改)
分层理解:
1.将对象的信息隐藏在对象内部。
2.不允许外部程序直接访问对象内部信息。
3.通过该类所提供的方法来实现对内部信息的操作和访问。
3.封装的含义:
把该封装的封装,该暴露的暴露。
(即实现良好的封装所具备的条件)
分层理解:
1.将对象的成员变量和实现细节隐藏起来,不允许外部直接访问。
2.把方法暴露出来,让方法来控制对这些成员变量进行安全的访问和操作。
4.实现封装的目的:
1.隐藏类的实现细节
2.让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对成员变量的不合理使用
3.可进行数据检查,从而有利于保证对象信息的完整性
4.便于修改提高代码的可维护性。
5.封装的实现步骤:
封装性的体现,需要权限修饰符来配合。
1.java规定了4中权限(从小到大排为:):private 缺省,protected,public
2.4种权限可以用来修饰类及类的内部结构:属性,方法,构造器,内部类
3.具体的,4种权限修饰符都可以用来修饰类的内部结构:属性,方法,构造器,内部类
但是修饰类的话,之恩给你是:缺省,public
四种权限修饰符的范围:
代码演示;
- 修改属性的可见性来限制对属性的访问(一般限制为private),例如:
public class Person {
private String name;
private int age;
}
这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
- 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:
public class Person{
private String name;
private int age;
public int getAge(){
return age;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public void setName(String name){
this.name = name;
}
}
采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。
3. 对属性进行合法性的限制:
public class Person{
private String name;
private int age;
public int getAge(){
return age;
}
public String getName(){
return name;
}
public void setAge(int age){
//第三步:属性的限制等
if(age<0 || age>200){
System.out.peintln("年龄不合法");
}else{
this.age = age;
}
}
public void setName(String name){
this.name = name;
}
}
总结封装性:
java提供了4种权限修饰符来修饰类及类的内部结构,体现类及类的 内部结构在被调用时的可见性的大小。