《Java的访问控制符.ppt》由会员分享,可在线阅读,更多相关《Java的访问控制符.ppt(11页珍藏版)》请在三一办公上搜索。
1、3.4 Java的访问控制符,3.4.1 Java的访问控制符种类 public 公共的,修饰类、属性和方法 private 私有的,修饰属性和方法 protected 受保护的,修饰属性和方法 private protected 私有受保护的,修饰属性和方法 无符号的缺省定义 友好的,修饰类、属性和方法作用:限定类、属性和方法被程序里的其他部分访问和调用,3.4.2 语法结构,修饰符1、修饰符2.修饰符N class 类名.修饰符1、修饰符2.修饰符N 数据类型 属性名 修饰符1、修饰符2.修饰符N 方法返回值类型 方法名(形式参数列表),3.4.3 访问控制符的特点公共访问控制符 publ
2、ic可以被所有其他类所访问和引用。但对类而言,其中包含的域和方法能否被访问看自身的访问控制符是否也为public。缺省访问控制符规定该类只能被同一包中的类访问和引用,称之为包访问性;类中的域和方法若也没有访问控制符来限定,则同样具备包访问性。私有访问控制符 private只能被该类自身所访问和修改,不能被任何其他类(包括子类)获取和引用。,保护访问控制符 protected只能被该类自身与它在同一个包中的其他类、在其他包中该类的子类引用,其主要作用是允许其他包中的它的子类来访问父类的特定属性。私有保护访问控制符 private protected可以被该类本身和该类的所有子类引用,类、属性和方
3、法的访问控制,A:所有类,B:包中的类,D:本类,C:所有 子类,E:包中子类,例:AccessControl.java,/测试访问控制符的使用 import java.applet.Applet;import java.awt.*;public class AccessControl extends Applet/定义主类,在浏览器中显示信息 ClassBeAccessed c=new ClassBeAccessed();/创建被访问使用类的对象(区域D)subClass sc=new subClass();/创建被访问类子类的对象(区域C)PackageClass ic=new Packa
4、geClass();/创建被访问类同一包中类的对象(区域B)public void paint(Graphics g)/显示可访问信息 g.drawString(Self Accessible:,10,20);/类可以访问自己的所有属性和方法g.drawString(c.toString(),20,35);g.drawString(Sub Accessible:,10,55);/子类可以直接访问父类的哪些属性g.drawString(sc.AccessDirectly(),20,70);g.drawString(Package Accessible:,10,90);/同包中的类可以访问哪些属性
5、g.drawString(ic.AccessDirectly(),20,105);g.drawString(Access using public method:,10,125);/通过调用被访问类的g.drawString(sc.AccessCls(),20,140);/公共方法来访问它的g.drawString(ic.AccessCls(),20,155);/所有性质的属性,class ClassBeAccessed/被访问类是非公共类,同一包中的其他类都可创建其对象 public String m_PublicProperty;/公共属性 String m_FriendlyPropert
6、y;/缺省属性(又称为友元)protected String m_ProtectedProperty;/保护属性 private String m_PrivateProperty;/私有属性 ClassBeAccessed()/构造函数,为各属性赋初值 m_PublicProperty=new String(Public);m_FriendlyProperty=new String(Friendly);m_ProtectedProperty=new String(Protected);m_PrivateProperty=new String(Private);public String toS
7、tring()/公共方法:连接各属性的字符串并显示 return(m_PublicProperty+;+m_FriendlyProperty+;+m_ProtectedProperty+;+m_PrivateProperty+;);,class subClass extends ClassBeAccessed/被访问类的子类 ClassBeAccessed c=new ClassBeAccessed();/创建被访问类的对象String AccessDirectly()/直接调用被访问类的属性,可调用的有:return(c.m_PublicProperty+;/公共属性+c.m_Friendl
8、yProperty+;/缺省属性+c.m_ProtectedProperty+;);/保护属性 String AccessCls()/通过调用被访问类的公共方法,可以调用它的各种性质的属性 return(c.toString();class PackageClass/与被访问类在同一个包中的类 ClassBeAccessed c=new ClassBeAccessed();/创建被访问类的对象 String AccessDirectly()/直接调用被访问类的属性,可调用的有:return(c.m_PublicProperty+;/公共属性+c.m_FriendlyProperty+;/缺省属
9、性+c.m_ProtectedProperty+;);/保护属性 String AccessCls()return(c.toString();/通过调用被访问类的公共方法,可以调用它的各种性质的属性,3.4.4 其他修饰符及修饰符的混合使用,(1)volatile 易失域修饰符可以同时被几个线程所控制和修改;一般用于修饰接受外部输入的属性,如当前时间的变量由系统后台线程修改;(2)native 本地方法修饰符 用来声明用其他语言书写方法体并具体实现方法功能的特殊的方法。声明:native double CaculateTax(Employee emp);/调用C+编写的CaculateTax模
10、块调用:Emp1.m_Tax=CaculateTax(Emp1);目的是充分利用已经存在的程序功能模块和避免重复工作;要注意跨平台性能。,(3)synchronized 同步方法修饰符 用于多线程共存的程序中的协调和同步。如果是一个类的方法(即static的方法),那么在系统调用执行前,将把系统类Class中对应当前类的对象加锁;如果修饰的是一个对象的方法(未用static修饰的方法),则这个方法在被调用执行前,将把当前对象加锁。,(4)修饰符的混合使用,大多数情况下,修饰符是可以混合使用的。例如:public abstract class transportmeans.但有以下例外:abstract不能与final并列修饰同一个类;abstract不能与private、static、final、native并列修饰同一个方法;abstract类中不能有private的成员(包括属性和方法);abstract方法必须在abstract类中;static方法中不能处理非static的属性。,