二、封装与访问控制
2、访问控制符
- 封装是面向对象的特性之一。
- 封装实际上把该隐藏的隐藏,该暴露的暴露,这些都需要通过Java访问控制符来实现。
4种访问控制级别:
(1)private(当前类访问权限):被声明为private的成员只能被当前类中的其他成员访问,不能在类外看到。
(2)缺省(包访问权限):如果一个类或类的成员前没有任何访问控制符,则获得缺省的访问权限,缺省的可以被同一包中的所有类访问。
(3)protected(子类访问权限):被声明为protected的成员既可以被同一个包中的其他类访问,也可以被不同包中的子类访问。
(4)public(公共访问权限):被声明为public的成员可被同一包或不同包中的所有类访问,即public访问修饰符可以使类的特性公用于任何类。
再论‘封装’
00P的最重要的好处之一是对数据和操作该数据的代码的封装,通过类来完成封装性。
在创建一个类,你正在创建一种新的数据类型,不但要定义数据的属性,也要定义操作数据的代码。
方法定义了对该类数据相一致的控制接口。
通过类的方法来使用类,而没有必要担心它的实现细节或在类的内部数据实际上是如何被管理的。
既然细节被隐藏,当需要时,它的内部工作可以被改变。只要你的代码通过类的方法来使用它,内部的细节可以改变而不会对类的外部带来负面影响。
什么是封装:
封装,就是隐藏实现细节。
- 将属性私有化,提供公有方法访问私有属性。
- 通过这些公有方法访问私有属性。
public class AccpTeacher2{
private String name;//教员姓名
//返回教员姓名
public String getName(){
return name;
}
//设定教员姓名
public void setName(String name){
this.name=name;//this代表当前类的实例
}
}
AccpTeacher2 teacher = new AccpTeacher2();
teacher.setName("李芳");//通过setter、getter方法访问name属性
String tName = teacher.getName();
实例成员和类成员:
1、static关键字
一旦将成员设为static,数据或方法就不会同那个类的任何对象实例联系到一起。
即使从未创建那个类的一个对象,仍能调用一个static方法,或访问一些static数据。
由于static方法不需要创建任何对象,所以它们不可简单地调用其他成员。
类变量是与类相关联的数据变量,也就是说,类变量是和该类所创建的所有对象相关联的变量,改变其中一个对象的这个类变量就同时改变了其它对象的这个类变量。
- 在类中可以定义静态成员属性和普通成员属性,也可以定义静态成员方法和非静态成员方法。静态成员属于类成员,可以通过类名直接访问,而非静态成员必须依赖于具体的对象而存在。
- 在类的静态成员方法中可以直接访问类的其它静态成员方法和静态成员属性,而只能通过对象来访问类中的非静态成员;在类的非静态成员方法中可以直接访问该类中所有的成员方法(包括静态和非静态),也可以直接访问该类中的任何成员属性(包括静态和非静态)。
2、类成员
有static修饰的成员,也可以称为静态成员;
例:static int a;
类成员:可以用类名直接访问:
<类名><成员名>
例:Point.a=10;
类成员也可以用对象名来访问,但是该类的所有对象都共享类成员变量。
例:
Point p = new Point();
Point.a = 10;
p.a = 100;
类成员提供了事实上的全局变量和全局方法。
3、实例成员
通过创建实例才能访问和使用的成员;
创建对象,由对象访问。
例:p.x = 10;
定义时无static修饰的成员;
例:
class Point(){
int x,y;//x,y为实例成员变量
}
实例成员不能用类名直接访问。
例:Point.x 访问是不合法的
声明为static的方法有以下几条限制:
- 它们仅能调用其他的static方法。
- 它们只能访问static数据。
- 它们不能以任何方式引用this或super。