《Java的访问控制符.ppt》由会员分享,可在线阅读,更多相关《Java的访问控制符.ppt(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 淮海工学院淮海工学院 计算机课程3.4 Java的访问控制符的访问控制符3.4.1 Java的访问控制符种类的访问控制符种类 publicpublic 公共的,修饰类、属性和方法公共的,修饰类、属性和方法 privateprivate 私有的,修饰属性和方法私有的,修饰属性和方法 protected protected 受保护的,修饰属性和方法受保护的,修饰属性和方法 private protectedprivate protected 私有受保护的,修饰属性和方法私有受保护的,修饰属性和方法 无符号的缺省定义无符号的缺省定义 友好的,友好的,修饰类、属性和方法修饰类、属性和方法作用:作用:
2、限定类、属性和方法被程序里的其他部分访限定类、属性和方法被程序里的其他部分访问和调用问和调用 淮海工学院淮海工学院 计算机课程3.4.2 3.4.2 语法结构语法结构修饰符修饰符1 1、修饰符、修饰符2.2.修饰符修饰符N N class class 类名类名.修饰符修饰符1 1、修饰符、修饰符2.2.修饰符修饰符N N 数据类型数据类型 属性名属性名 修饰符修饰符1 1、修饰符、修饰符2.2.修饰符修饰符N N 方法返回值类型方法返回值类型 方法名方法名(形式参数列表形式参数列表)淮海工学院淮海工学院 计算机课程3.4.3 3.4.3 访问控制符的特点访问控制符的特点公共访问控制符公共访问控
3、制符 public public可以可以被所有其他类所被所有其他类所访问和引用访问和引用。但对类而言,其中包含的域和方法能。但对类而言,其中包含的域和方法能否被访问看自身的访问控制符是否也为否被访问看自身的访问控制符是否也为publicpublic。缺省访问控制符缺省访问控制符规定该类只能规定该类只能被同一包中的类被同一包中的类访问和引用访问和引用,称之为包访问性;类中的域和方法若,称之为包访问性;类中的域和方法若也没有访问控制符来限定,则同样具备包访问性。也没有访问控制符来限定,则同样具备包访问性。私有访问控制符私有访问控制符 private private只能被该只能被该类自身类自身所访所
4、访问和修改,不能被任何其他类(包括子类)获取和问和修改,不能被任何其他类(包括子类)获取和引用。引用。淮海工学院淮海工学院 计算机课程保护访问控制符保护访问控制符 protectedprotected只能被该类自身只能被该类自身与它在同一个包中的其他类、在其他包中该类的与它在同一个包中的其他类、在其他包中该类的子类引用,其主要作用是子类引用,其主要作用是允许其他包中的它的子允许其他包中的它的子类来访问父类类来访问父类的特定属性。的特定属性。私有保护访问控制符私有保护访问控制符 private protectedprivate protected可可以被该以被该类本身和该类的所有子类类本身和该类
5、的所有子类引用引用 淮海工学院淮海工学院 计算机课程类、属性和方法的访问控制类、属性和方法的访问控制 类属性与方法public缺省publicABprotectedB+CB缺省BBprivate protectedC+DE+DprivateDDA:所有类B:包中的类D:本类 C:所有 子类E:包中子类 淮海工学院淮海工学院 计算机课程例:例:AccessControl.java/测试访问控制符的使用测试访问控制符的使用 import java.applet.Applet;import java.awt.*;public class AccessControl extends Applet/定义
6、主类,在浏览器中显示信息定义主类,在浏览器中显示信息 ClassBeAccessed c=new ClassBeAccessed();/创建被访问使用类的对象(区域创建被访问使用类的对象(区域D)subClass sc=new subClass();/创建被访问类子类的对象(区域创建被访问类子类的对象(区域C)PackageClass ic=new PackageClass();/创建被访问类同一包中类的对象(区域创建被访问类同一包中类的对象(区域B)public void paint(Graphics g)/显示可访问信息显示可访问信息 g.drawString(Self Accessibl
7、e:,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);/同包中的类可以访问哪些属性同包中的类可以访问哪些属性g.drawString(ic.AccessDirectly(),20,105);g.drawStrin
8、g(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
9、 m_FriendlyProperty;/缺省属性(又称为友元)缺省属性(又称为友元)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_Priv
10、ateProperty=new String(Private);public String toString()/公共方法:连接各属性的字符串并显示公共方法:连接各属性的字符串并显示 return(m_PublicProperty+;+m_FriendlyProperty+;+m_ProtectedProperty+;+m_PrivateProperty+;);淮海工学院淮海工学院 计算机课程class subClass extends ClassBeAccessed/被访问类的子类被访问类的子类 ClassBeAccessed c=new ClassBeAccessed();/创建被访问类的
11、对象创建被访问类的对象String AccessDirectly()/直接调用被访问类的属性,直接调用被访问类的属性,可调用的有:可调用的有:return(c.m_PublicProperty+;/公共属性公共属性+c.m_FriendlyProperty+;/缺省属性缺省属性+c.m_ProtectedProperty+;);/保护属性保护属性 String AccessCls()/通过调用被访问类的公共方法,可以调用它的各种性质的属性通过调用被访问类的公共方法,可以调用它的各种性质的属性 return(c.toString();class PackageClass/与被访问类在同一个包中的
12、类与被访问类在同一个包中的类 ClassBeAccessed c=new ClassBeAccessed();/创建被访问类的对象创建被访问类的对象 String AccessDirectly()/直接调用被访问类的属性,可调用的有:直接调用被访问类的属性,可调用的有:return(c.m_PublicProperty+;/公共属性公共属性+c.m_FriendlyProperty+;/缺省属性缺省属性+c.m_ProtectedProperty+;);/保护属性保护属性 String AccessCls()return(c.toString();/通过调用被访问类的公共方法,可以调用它的各种
13、性质的属性通过调用被访问类的公共方法,可以调用它的各种性质的属性 淮海工学院淮海工学院 计算机课程3.4.4 3.4.4 其他修饰符及修饰符的混合使用其他修饰符及修饰符的混合使用(1)volatile volatile 易失域易失域修饰符修饰符可以同时被几个线程所控制和修改可以同时被几个线程所控制和修改;一般用于修饰接受外部输入的属性,如当前时间的变一般用于修饰接受外部输入的属性,如当前时间的变量由系统后台线程修改量由系统后台线程修改;(2)native 本地方法修饰符本地方法修饰符 用来声明用其他语言书写方法体并具体实现方法功能用来声明用其他语言书写方法体并具体实现方法功能的特殊的方法。的特
14、殊的方法。声明:声明:native double CaculateTax(Employee emp)native double CaculateTax(Employee emp);/调用调用C+C+编写编写的的CaculateTaxCaculateTax模块模块调用调用:Emp1.m_Tax=CaculateTax(Emp1);Emp1.m_Tax=CaculateTax(Emp1);目的是充分利用已经存在的程序功能模块和避免重复目的是充分利用已经存在的程序功能模块和避免重复工作工作;要注意跨平台性能。;要注意跨平台性能。淮海工学院淮海工学院 计算机课程(3 3)synchronized sy
15、nchronized 同步方法同步方法修饰符修饰符 用于多线程共存的程序中的协调和同步。用于多线程共存的程序中的协调和同步。如果是一个类的方法(即如果是一个类的方法(即static的方法),那么的方法),那么在系统调用执行前,将把系统类在系统调用执行前,将把系统类Class中对应当中对应当前类的对象加锁;前类的对象加锁;如果修饰的是一个对象的方法(未用如果修饰的是一个对象的方法(未用static修饰修饰的方法),则这个方法在被调用执行前,将把当的方法),则这个方法在被调用执行前,将把当前对象加锁。前对象加锁。淮海工学院淮海工学院 计算机课程(4)修饰符的混合使用)修饰符的混合使用 大多数情况下
16、,修饰符是可以混合使用的。大多数情况下,修饰符是可以混合使用的。例如:例如:public abstract class transportmeans.public abstract class transportmeans.但有以下例外:但有以下例外:abstractabstract不能与不能与finalfinal并列修饰同一个类;并列修饰同一个类;abstractabstract不能与不能与privateprivate、staticstatic、finalfinal、nativenative并列修饰并列修饰同一个方法;同一个方法;abstractabstract类中不能有类中不能有privateprivate的成员(包括属性和方法);的成员(包括属性和方法);abstractabstract方法必须在方法必须在abstractabstract类中;类中;staticstatic方法中不能处理非方法中不能处理非staticstatic的属性。的属性。