《访问控制属性》PPT课件

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

•包–是一组类的集合•一个包可以包含若干个类文件,还可包含若干个包–包的作用•将相关的源代码文件组织在一起•类名的空间管理,利用包来划分名字空间,便可以避免类名冲突•提供包一级的封装及存取权限类的组织——包的概念•包的命名–每个包的名称必须是“独一无二”的–Java中包名使用小写字母表示–命名方式建议•将机构的Internet域名反序,作为包名的前导•若包名中有任何不可用于标识符的字符,用下划线替代•若包名中的任何部分与关键字冲突,后缀下划线•若包名中的任何部分以数字或其他不能用作标识符起始的字符开头,前缀下划线•编译单元与类空间–一个Java源代码文件称为一个编译单元,由三部分组成•所属包的声明(省略,则属于默认包)•Import(引入)包的声明,用于导入外部的类•类和接口的声明–一个编译单元中只能有一个public类,该类名与文件名相同,编译单元中的其他类往往是public类的辅助类,经过编译,每个类都会产一个class文件–利用包来划分名字空间,便可以避免类名冲突•包的声明–命名的包(NamedPackages)•例如:packageMypackage;–默认包(未命名的包)•不含有包声明的编译单元是默认包的一部分•包与目录–Java使用文件系统来存储包和类–包名就是文件夹名,即目录名–目录名并不一定是包名–用javac编译源程序时,如遇到当前目录(包)中没有声明的类,就会以环境变量classpath为相对查找路径,按照包名的结构来查找。因此,要指定搜寻包的路径,需设置环境变量classpath•引入包–为了使用其它包中所提供的类,需要使用import语句引入所需要的类–Java编译器为所有程序自动引入包java.lang–import语句的格式importpackage1[.package2…].(classname|*);•其中package1[.package2…]表明包的层次,它对应于文件目录•classname则指明所要引入的类名•如果要引入一个包中的所有类,则可以使用星号(*)来代替类名访问属性我们定义的每一个类,以及其中的每一个成员属性和成员方法都存在是否可以被他人访问的访问属性。不同的访问属性,标识着不同的可访问性。所谓可访问性是一种在编译时确定的静态特性。在Java语言中,也正是利用访问属性机制实现数据隐藏,限制用户对类及类中成员的访问权限。类成员的访问权限控制Java推出了“访问控制修饰符”的概念,允许类创建者声明哪些东西是类使用者可以使用的,哪些是不可以使用的。这些访问控制的级别在“最大访问”到“最小访问”范围之间,分别包括:public、defaut(无修饰符)、protected、private。类的访问修饰符(2种)public公共访问defaut缺省(友好)访问属性和方法的访问控制修饰符(4种)Public公共访问defaut缺省访问protected保护访问private私有访问为类、类中的成员属性和成员方法指定访问属性的格式为:[public]classClassName;[public|private|protected]memberVariableName;[public|private|protected]emberMethodName(parameterList);由于除默认访问属性外,指定其他三种访问属性需要写在定义之前,所以,又将它们称为修饰符,默认访问属性又称为friendly(友好)。公共访问控制修饰符public为Java中的类加入访问控制修饰符只能是public,即公共类。一个类被声明为公共类,表明它可以被所有的其它类访问和引用,这里的访问和引用是指这个类作为整体是可见的和可使用的,程序的其它部分可以创建这个类的对象、访问这个类内部可见的成员属性和成员方法。一个类作为整体对于程序的其它部分可见,并不能代表类内的所有属性和方法也同时对程序的其它部分可见,前者是后者的必要条件,类内属性和方法能否被访问,还要看这些属性和方法自己的访问控制修饰符。另外,将实例属性的访问控制修饰应用public是一种糟糕的设计!——破坏了封装性缺省访问控制修饰符假如没有为类添加访问控制修饰符,说明它具有缺省的访问特性。这种缺省的访问控制权规定,该类只能被同一个包中的类访问和引用,而不可以被其它包中的类使用,这种访问特性称为包访问性。通过声明类的访问控制权限,可以使整个程序结构清晰、严谨、减少可能产生的类间干扰和错误。数据隐藏是面向对象的程序设计倡导的设计思想。将数据与其操作封装在一起,并将数据的组织隐藏起来,利用成员方法作为对外的操作接口,这样不但可以提高程序的安全性、可靠性,还有益于日后的维护、扩展和重用。将类中的数据成员设置为private访问属性是实现数据隐藏机制的最佳方式。private访问属性可以应用于类中的成员,包括成员属性、成员方法和内部类或内部接口。私有访问控制修饰符私有访问控制修饰符用private修饰的属性和方法,只能被该类自身访问和修改,而不能被任何其它类,包括该类的子类,获取或引用。1、对私有数据访问的方法例如有二个实例字段,它们被声明在student类中:privateStringnane;privateintage;private关键字用来确保这些实例属性只能被本类中的方法使用。2、私有方法的访问考虑到封装性,一般类中的属性都是私有。对于方法又是怎样的?虽然类中大多数方法都是公开的,但是私有方法也是经常使用的。在下面的情况下可以考虑使用私有方法:•与类的使用者无关的那些方法。•如果类的实现改变了,不容易维护的那些方法。packagetest1;publicclassStudent{privateStringname;publicStudent(Stringn){name=n;}publicStringgetName(){returnname;}}packagetest2;importtest.Student;publicclasstest{publicstaticvoidmain(String[]args){Studentstu=newStudent(zhangsan);//System.out.println(stu.name);System.out.println(stu.getName());}}例1不同包之间的类访问如果将一个成员属性或成员方法定义为public类型,则在同一类、子类、同一包中的类、不同的包中的类均可以访问该成员变量或成员方法。//Demopub1.javapackagepub1;publicclassDemopub1{//public修饰是必需的。//公共类型的成员变量publicinta;//公共类型的成员方法publicvoidmethod(){System.out.println();}}//Demopub2.javapackagepub2;importpub1.*;classDemopub2{publicstaticvoidmain(Stringargs[]){//实例化aDemo1Demopub1aDemo1=newDemopub1();//访问aDemo1中的公共成员方法aDemo1.method();//访问aDemo1中的公共成员变量aDemo1.a=10;inta=aDemo1.a;System.out.println(aDemo1中的公共成员变量a的值:+a);}}Demo1中的公共成员变量a的值:10上面定义的两个类Demopub1和Demopub2处于不同包内,因此,Demopub1必须修饰为public类,否则在Demopub2中是不能访问的。按照公共类型的成员属性的访问条件,位于不同包中的类仍然可以访问公共类型的成员属性。例2私有类型属性的访问如果一个成员属性或成员方法声明为私有类型,则该属性或方法只能在同一类中被访问。//DemoPrivate.javapublicclassDemoPrivate{publicinta;//公共类型的成员变量privateintb;//私有类型的成员变量publicintgetA(){//公共类型的成员方法returna;}privateintgetB(){//私有类型的成员方法returnb;}publicDemoPrivate(inta,intb){//构造方法this.a=a;this.b=b;}publicstaticvoidmain(Stringargs[]){DemoPrivateaDemoPrivate=newDemoPrivate(1,2);//访问公共类型的成员方法inta=aDemoPrivate.getA();System.out.println(变量a的值:+a);//访问私有类型的成员方法intb=aDemoPrivate.getB();System.out.println(变量b的值:+b);}}上面程序的输出结果为:变量a的值:1变量b的值:2由上面的程序可以看出,尽管成员属性和成员方法定义为私有类型。但由于处于同一类中,仍然能够对成员属性和成员方法进行访问。如果在另一类中,则访问受到限制(请同学们自己实验)。保护访问控制修饰符•用protected修饰的成员变量可以被三种类所引用:该类自身、与它在同一个包中的其它类、在其它包中的该类的子类。使用protected修饰符的主要作用是允许其它包中的该类的子类来访问父类中的特定属性。protected关键字为我们引入了一种名为“继承”的概念,定义新类时,以现有的类为基础,并在其中加入新的成员,同时不会对现有的类产生影响——我们将这种现有的类称为“基础类”或“基本类”(Baseclass),对于从现有类继承后而产生的新类,我们称其扩展了现有类。例3:不同包中公共类中protected修饰的方法的访问如果声明一个成员属性或成员方法的访问类型为protected,则该成员属性或成员方法只能够被该类内部、子类和相同包中的类访问.//Demopro3.Javapackagepro3;publicclassDemopro3{//公共类型的成员变量publicinta;//保护类型的成员方法protectedvoidmethod(){System.out.println();}}//Demopro4.Javapackagepro4;importpro3.*;publicclassDemopro4{publicstaticvoidmain(Stringargs[]){Demopro3aDemo1=newDemopro3();//实例化Demo1//不能访问Demopro3中的保护类型成员方法//原因是该方法是protected类型//aDemo1.method();//可以访问Demopro3中的公共成员变量aDemo1.a=10;inta=aDemo1.a;System.out.println(Demopro3中的公共成员变量a的值:+a);}}•如果上面的两个程序处在相同的包中,Demopro4.java中的aDem01.method()访问语句就会有效。如果两个程序位于不同的包中,则保护类型的成员变量或成员方法的访问受到限制。因此在Dempro4.java中的aDemo1.method()不能执行,因而被加以注释。归纳上述4种不同的访问属性,可以将各种访问属性的可访问权限总结在表中:类型private无修饰protectedpublic同一类yesyesyesyes同一包中的子类noyesyesyes同一包中的非子类noyesyesyes不同包中的子类nonoyesyes不同包中的非子类nononoyes内部类•Java中可以把一个类定义在某个类的内部,这样的类成为内部类。内部类所在的类成为外部类。•根据内部类定义的位置,内部类一般分为:定义在方法体内的内部类和定义在方法体外面的内部类。定义在方法体内的内部类又分为有实例名称的内部类和无实例名称的内部类(成为匿名内部类)。•使用内部类的原因:1.

1 / 44
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功