封装性的特点:高内聚,低耦合
高内聚:内部数据操作细节自己完成,不允许外部干涉
低耦合:仅对外部暴露少量的方法用于使用
(关键在于对private关键字的利用,使用了private声明的属性或者方法不能在类外调用)
赋值操作一定会受到数据类型与存储范围的限制,加入额外的限制条件,这个条件不能在属性声明的时候体现,只能通过方法进行限制条件的添加,避免用户再次使用对象、属性的方法
封装性的体现
类的属性私有化(private),同时提供公共的(public)的方法来获取(getXXX)和设置(setXXX)
public class Person {
int age;
String name;
public void sleep() {
System.out.println("人会睡觉");
}
public void eat()
{
System.out.println("人会睡觉");
}
}
//如上所示这是一个正常的类,并没有体现出封装性
//接下来,我们尝试用封装性的思想,将其转化
public class Person {
//首先第一步先将类内部的属性全部都设置为private的权限
//使他们不能够通过外接调用直接赋值
private int age;
private String name;
public void sleep() {
System.out.println("人会睡觉");
}
public void eat()
{
System.out.println("人会睡觉");
}
//第二步就需要给外界渠道去设置和获取属性的值
//set即为设置,在这个部分通过方法去限制输入数据的格式,相比于直接调用,更能准确地输入数据
//get即为获取,类的外部就不能够直接通过引用获得数据,只能通过指定方法获得
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
四种权限修饰符的理解
权限修饰符 | 类内部 | 同一个包 | 不同包的子类 | 同一个工程 |
private | √ | |||
缺省(default) | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
注:
1、对于类的修饰,只能使用public和default,不能使用其他两个
2、可以在类的内部结构、属性、方法、构造器和内部类中
构造器的使用
构造器与类同名,比如Person p1 = new Person(),Person()就是构造器
(若没有定义的且显示出来的构造器,则系统默认定义一个空参构造器)
自定义构造器格式
权限修饰符 类名(形参列表)
一个类中定义的多个构造器,彼此之间构成重载(reload)
一旦我们显式的定义了类的构造器之后,系统就不再提供默认的空参构造器了,且一个类中,至少会有一个构造器
public class Person {
private int age;
private String name;
public void sleep() {
System.out.println("人会睡觉");
}
public void eat()
{
System.out.println("人会睡觉");
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public Person (int chuanru)
{
age = chuanru;
}
public Person (String chuanru)
{
name = chuanru;
}
public Person ()
{
}
//在如上代码中,三个构造器重名且在同一个类中,所以彼此之间构成重载
//此时需要注意的是,如果我们自己定义了构造器,系统给的空参构造器就不再使用
//所以此时需要我们自己定义一个空参构造器
}