您好,欢迎访问三七文档
第六讲类的封装本讲主要内容:软件包的创建和使用成员访问权限修饰符类的访问权限修饰符一、软件包的创建和使用软件包的认识软件包也是类库的封装机制,可解决不同包中的类同名的问题。具体而言,软件包由一组类和接口组成。软件包的建立从示例程序理解packagemylib.simple;publicclassList{publicList(){System.out.println(mylib.simple.List);}}结论:(1)包对应着文件系统的目录层次结构。(2)编译生成的字节码文件需置放到包中,即包名所指定的目录中。软件包的创建形式:packagepackagename;要点:package语句必须是文件中的第一条语句。用“.”作为分隔符来指明包(目录)的层次。包名由小写字母组成。没有注明放入到某个包中去的类,自动地归在一个无名包中软件包的使用设置环境变量classpath:classpath环境变量存放包的搜索路径。使用如下两种方法之一:方法一:用import加载包中的类。import包名;或import包名.类名;方法二:直接用包名.类名去访问类。说明:import语句必须放在package语句和类的定义之间。某个类若用到其他类,会优先在所在软件包中查找,继而在classpath指定的路径下查找。软件包的使用(续)例:在D盘上创建newjw目录,在此新目录下建立如下程序文件,阅读分析和理解软件包的使用。importmylib.simple.List;classTestList{publicstaticvoidmain(String[]args){newList();}}试用方法二访问类,改写并编译执行以上程序。软件包的使用(续)思考?1.一个程序的首语句是packagea.b.c.d;其意是?2.一个程序中可含多个类,它们可分放到不同的软件包吗?3.若要使用d:\javawork\lesson07下的软件包,classpath如何设置?4.如何用到不同目录下的软件包myclass.lib1中的类?5.同一个软件包中的类可否直接使用?6.一个类设计成可被到处使用,应声明为public类吗?7.一个类用到其他类时,编译时的类查找路径是?软件包的操作练习1.设计一个P类置入mylib.tools包中,该P类含rint和rintln方法,可实现数据的换行和不换行输出。2.设计一个Input类,含有来输入整数或字符串的方法,以使下面的程序能正确编译和执行。importmylib.tools.Input;importmylib.tools.P;classTestInput{publicstaticvoidmain(String[]args){inty=Input.aInt();P.rintln(y);Strings=Input.aString();P.rintln(s);}}二、Java访问权限修饰符Java访问权限修饰符决定类成员的访问权限的修饰符有:public、protected、private。权限的设定对于类的封装有着重要的意义。公开需要公开的,隐藏必须隐藏的。这样就让类的使用变得简明。无权限修饰符的成员允许本类、同一软件包中的类访问。即享受“包访问权限”。public成员public描述的是一个类中可向外公开的信息(属性和方法)。允许本类、继承类、同一软件包中的类、不同软件包中的类访问。示例:不同软件包之间一个类访问另一个类的public成员。packagemylib.lib1;//Base.javapublicclassBase{publicintx=5;publicvoidprint(){//本类访问System.out.println(base+x);}}packagemylib.lib2;//Derive.javaclassDerive{publicstaticvoidmain(Stringargs[]){mylib.lib1.Baseb=newmylib.lib1.Base();b.x=5;//不同软件包的类访问b.print();}}public成员(续)思考1.程序编译后,磁盘上新增的目录结构?2.在Base类中,可以公开的信息是?3.public的公开范围?4.如果Base类中的成员变量x前无public,会在何环节产生问题?private成员private修饰的成员变量和成员方法都只能在本类中访问。private修饰不希望被其它类访问的变量和方法。有两种限制:其它类中的该类对象不能访问private成员。派生子类时,子类不能继承父类的private成员private成员(续)classBase1{privateintx=1;privatevoidprint(){System.out.println(base+x);}voiddoprint(){print();}}classDerive1{publicstaticvoidmain(String[]args){Base1b=newBase1();b.doprint();//直接调用b.print();试试!}}private成员(续)假如构造方法是private的,类就不可直接实例化成对象:classSundae{privateSundae(){System.out.println(Hereisasundae);}staticSundaegetASundae(){returnnewSundae();}}classTestSundae{publicstaticvoidmain(String[]args){Sundaes=Sundae.getASundae();}}protected成员受保护成员。其修饰的数据和方法对继承它的子类公开。protected成员允许本类、继承类和同一软件包中的类访问。protected成员(续)包权限访问:classBase1{protectedintx=1;protectedvoidprint(){System.out.println(base+x);}}classDerive1{publicstaticvoidmain(String[]args){Base1b=newBase1();b.print();}}protected成员(续)继承类对protected成员的访问://Cookie.javapackagemylib.simple;publicclassCookie{publicCookie(){System.out.println(Cookieconstructor);}protectedvoidbite(){System.out.println(bite);}}//Chocolatechip.javaimportmylib.simple.Cookie;classChocolatechipextendsCookie{Chocolatechip(){System.out.println(Chocolatechip);}publicstaticvoidmain(String[]args){Chocolatechipc=newChocolatechip();c.bite();}}访问权限修饰思考?1.何谓类的封装?2.从封装角度比较以上不同的权限修饰?3.一个public成员向谁公开信息?4.一个protected成员向谁公开信息?5.一个private成员向其它类公开信息吗?6.private有何意义?访问权限修饰试填表说明不同访问修饰符的访问权限三、类的访问权限类访问权限无访问修饰符即为缺省类。可以被同一个软件包中的类访问。public类通过import导入(配合classpath的设置),可以被任何其它的类访问。publicclass类名private类专用于修饰内部类,内部类常用于处理本类中的事件。类访问权限(续)思考?假如某一程序中定义了一个public类,框架如下:packagemylib.abc;publicclassAbc{„}则:1.该程序源文件应命名为?2.在另一个程序中如何能访问到Abc类?3.如果该类有显式的构造方法,并允许在其它类中创建该类的对象,构造方法的权限设置应是?类访问权限(续)练习1.分别构造一个Circle类和Square类,可接受半径(边长),包含求面积的方法。将它们放在mylib.simple包中。2.利用上述类,求半径为4.5的圆面积,边长为4.5和6.5的矩形面积。
本文标题:第6讲 类的封装
链接地址:https://www.777doc.com/doc-3281622 .html