l 隐藏和封装
理解封装:
封装(encapsulation)是面向对象三大基本特征之一(另2个继承、多态),封装指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作。
封装实现以下目的:
·隐藏类的实现细节
·让使用者只能通过事先定义好的方法来访问数据,这样就可以在方法中加入控制逻辑,限制对属性的不合理访问。
·可进行数据检查,保证对象信息的完整性。
·便于修改,提高代码的可维护性。
为了良好的封装,要从两个方面考虑:
·将对象的“属性”和实现细节隐藏起来,不允许外部直接访问。
·把方法暴露出来,让方法控制对属性进行安全的访问和操作。
上面的两方面的实现需要使用“访问控制修饰符”。
·访问控制修饰符:
Java提供3个访问控制修饰符:private、protected、public,还有一个默认访问控制修饰符,修饰类或类的成员时不用写访问控制修饰符就是默认访问控制修饰符,共4个级别的访问控制修饰符。
访问控制修饰符访问权限由小到大
private—-默认访问控制修饰符---protected---public
访问控制修饰符详细介绍:
·private: 当前类访问权限。类成员使用private访问控制修饰符时,则这个成员只能在当前类的内部被访问。private用来修饰属性最合适。
·default:包访问权限。类成员不使用任何访问控制修饰符就用默认访问控制修饰符。它修饰的成员或外部类可以被相同包下的其他类访问。
·protected:子类访问权限。
·public:公共访问权限。
访问控制修饰符用于控制类的成员是否可以被其他类访问,对于局部变量而言它的作用域是它所在的方法,不能被其他类访问,所以局部变量不能用访问控制修饰符。
使用访问控制修饰符的基本原则:
·类里绝大部分“属性”都应该使用private修饰,只有一些使用static修饰的,类似全局变量的属性才可能考虑使用public修饰符。
·如果某个主要用作其他类的父类,该类里包含的大部分方法可能仅希望被子类重写,而不想被外界直接调用,则应该使用protected。
·希望暴露出给其他类调用的方法应该使用public修饰符。因此类构造器使用public修饰符,从而允许在其他地方创建该类的实例。
------------------------------
例子:
public class Person
{
private String name;
private int age;
public void setName(String name)
{
p.name = name;
}
public String getName()
{
return p.name;
}
}
public class PersonTest
{
public static void main(String[] args)
{
Person p = new Person();
p.setName("Abc");
System.out.println(p.getName());
}
}
例子中通过方法操作成员变量,而不能直接通过“对象.属性”来直接修改属性的值,这就是封装