文档详情

JAVA语言及程序设计-第三讲-03-访问权限及封装性.ppt

发布:2017-05-31约1.05万字共57页下载文档
文本预览下载声明
* * * * * * * * * * * * 缺省访问控制 如:class Tom { int weight; int f(int a,int b) {.......} .......... } class Bob { void g() { Tom cat=new Tom(); cat.weight=23; cat.f(3,4); }   友好访问允许我们将相关的类都组合到同一个文件夹内(即同一个包内),方便它们的友好成员之间相互访问。我们便“拥有”了那个包内的代码。 缺省访问控制   在任何一个与Tom 同一包中的类中,都可以通过Tom类的类名访问Tom类的友好的类变量和友好的类方法。 案例 class Tom { static float weight; static float f(float a,float b) { float c;   c=a+b; return c; } } class Bob { float x,y; void g() { x=Tom.weight; y=Tom.f(10,20); } } 通过Tom类的类名访问友好的类变量和友好的类方法 缺省访问控制 注: 1.在同一源文件中编写命名的类总是在同一包中的。 2.如果源文件中用import语句引入了另外一个包中的类,并用该类创建了一个对象,那么该类的这个对象将不能访问自己的友好变量和友好方法。 【例】:定义了一个名为dessert的包: package dessert; public class Cookie { public Cookie() {System.out.println(Cookie constructor); } void foo() {System.out.println(foo); } } 文件Cookie.java必须驻留在名为dessert的一个子目录内 import dessert.*; public class Dinner { public Dinner() { System.out.println(Dinner constructor); } public static void main(String[] args) { Cookie x = new Cookie(); //! x.foo(); // Cant access } }  可以创建一个Cookie对象,因为它的构建器是public的,而且类也是public的。然而,foo()成员不可在Dinner.java内访问,因为foo()只有在dessert包内才是“友好”的。 import dessert.*; public class Dinner { public Dinner() { System.out.println(Dinner constructor); } public static void main(String[] args) { Cookie x = new Cookie(); //! x.foo(); // Cant access } }  包访问性实际上给出了一种访问限制,对于其它包中的用户来说,是不能访问当前包中的“友好”成员的。这种效果往往能令人满意,因为默认访问是我们通常采用的方法,默认的“友好”包访问通常已经是一种适当的隐藏方法。 .4 受保护的成员变量和方法   用protected修饰的成员变量 和方法被称为受保护的成员变量和受保护的方法。 protected关键字为我们引入了一种名为“继承”的概念 .4 受保护的成员变量和方法   用protected修饰的成员变量 和方法被称为受保护的成员变量和受保护的方法。   若一个类继承了另一个类,则两个类不论是否在同一个包中,子类能够访问父类的protected成员。 class Tom { protected float weight; protected float f(float a,float b) { …… } } class Bob extends Tom { void g()
显示全部
相似文档