JAVA语言与程序设计-第三讲-03-访问权限及封装性.ppt
- 文档编号:18911690
- 上传时间:2024-02-11
- 格式:PPT
- 页数:57
- 大小:506.50KB
JAVA语言与程序设计-第三讲-03-访问权限及封装性.ppt
《JAVA语言与程序设计-第三讲-03-访问权限及封装性.ppt》由会员分享,可在线阅读,更多相关《JAVA语言与程序设计-第三讲-03-访问权限及封装性.ppt(57页珍藏版)》请在冰点文库上搜索。
Java语言与程序设计北京邮电大学计算机学院鄂海红62282747-801访问权限访问修饰符给出了一种访问权限public是Java的访问修饰符之一观察下列代码:
publicclassExamplepublicstaticvoidmain(Stringargs);公共访问控制符公共访问控制符访问权限类的访问类的访问控制符控制符publicprivate缺省访问控制符缺省访问控制符protectedpublicprivate缺省访问控制符缺省访问控制符protected访问权限访问权限的级别排列:
访问权限的级别排列:
访问限制修饰符,按访问权限从高到低的排列顺序是public,protected,友好的,private。
.1共有变量和共有方法共有变量和共有方法用用public修饰的成员变量和修饰的成员变量和方法称为共有变量和共有方法。
方法称为共有变量和共有方法。
共有的int型变量如:
如:
classTompublicintweight;publicintf(inta,intb).1共有变量和共有方法共有变量和共有方法方法f是共有方法当用类当用类Tom创建了一个对象后,该对象创建了一个对象后,该对象可以访问自己的可以访问自己的public变量变量和public方法。
如:
如:
classTompublicintweight;publicintf(inta,intb).1共有变量和共有方法共有变量和共有方法如:
如:
classTompublicintweight;publicintf(inta,intb).classBobvoidg()Tomcat=newTom();cat.weight=23;cat.f(3,4);合法权限表示了对象访问自己的变量和使用类中的方法时的某种限制如:
如:
classTompublicintweight;publicintf(inta,intb).classBobvoidg()Tomcat=newTom();cat.weight=23;cat.f(3,4);使用使用public关键字时,它意味着紧随在关键字时,它意味着紧随在public后面的成员声明适用于所有人。
后面的成员声明适用于所有人。
如果Tom类中的某个成员是public类变量,那么在任何一个类中,也可以通过类名Tom来操作Tom的这个类成员变量。
如果Tom类中的某个方法是public类方法,那么我们在任何一个类中,也可以通过类名Tom来调用Tom类中的这个public类方法。
.1共有变量和共有方法共有变量和共有方法如:
如:
classTompublicstaticfloatweight;publicstaticfloatf(floata,floatb)floatc;c=a+b;returnc;classBobfloatx,y;voidg()x=Tom.weight;y=Tom.f(10,20);通过类名Tom来操作类变量和类方法通过类名Tom来操作类变量和类方法如:
如:
classTompublicstaticfloatweight;publicstaticfloatf(floata,floatb)floatc;c=a+b;returnc;classBobfloatx,y;voidg()x=Tom.weight;y=Tom.f(10,20);应减少应减少public属性的使用属性的使用.2私有变量和私有方法私有变量和私有方法用用private修饰的成员变量和修饰的成员变量和方法称为私有变量和私有方法。
方法称为私有变量和私有方法。
private私有访问控制符私有访问控制符私有的int型变量如:
如:
classTomprivateintweight;privateintf(inta,intb).方法f是私有方法private当在另外一个类中用类当在另外一个类中用类Tom创建了一个对象创建了一个对象后,后,该对象不能访问自己的私有变量该对象不能访问自己的私有变量和方法和方法。
如:
如:
classTomprivateintweight;privateintf(inta,intb).如:
如:
classTomprivateintweight;privateintf(inta,intb).classBobvoidg()Tomcat=newTom();cat.weight=23;cat.f(3,4);private非法private私有私有访问控制符:
访问控制符:
用用private修饰的属性或方法修饰的属性或方法只能被该类自身所访问和修改,而只能被该类自身所访问和修改,而不能被任何其他类,包括该类的子不能被任何其他类,包括该类的子类直接访问。
类直接访问。
classExpprivateintmoney;Exp()money=2000;privateintgetMoney()returnmoney;publicstaticvoidmain(Stringargs)Expexa=newExp();exa.money=3000;intm=exa.getMoney();System.out.println(money=+m);【程序案例2.23】classExpprivateintmoney;Exp()money=2000;privateintgetMoney()returnmoney;publicstaticvoidmain(Stringargs)Expexa=newExp();exa.money=3000;intm=exa.getMoney();System.out.println(money=+m);私有变量可以被私有变量可以被该类自身所访问和修改该类自身所访问和修改私有变量私有方法可被私有变量私有方法可被该类自身所访问和修改该类自身所访问和修改同一类中【例】classExpprivateintmoney;Exp()money=2000;privateintgetMoney()returnmoney;publicstaticvoidmain(Stringargs)Expexa=newExp();exa.money=3000;intm=exa.getMoney();System.out.println(money=+m);私有变量私有方法可被私有变量私有方法可被该类自身所访问和修改该类自身所访问和修改【程序案例2.23】private关键字意味着,只有在本类中创建该类的关键字意味着,只有在本类中创建该类的对象时,这个对象才能访问自己的私有成员变量和类对象时,这个对象才能访问自己的私有成员变量和类中的私有方法,这似乎将类与我们自己都隔离起来。
中的私有方法,这似乎将类与我们自己都隔离起来。
对象访问私对象访问私有成员变量有成员变量classTVprivateintcolor;privateintsize;TV(intx,inty)color=x;size=y;例如:
分析程序,思考问题?
分析程序,思考问题?
类中成员变量类中成员变量分别是什么变量?
分别是什么变量?
应知测试:
应知测试:
classTVprivateintcolor;privateintsize;TV(intx,inty)color=x;size=y;例如:
不能被任何其他类,包不能被任何其他类,包括该类的子类直接访问括该类的子类直接访问私有变量私有变量对象中的属性一般应设计为只能被同一对象中的方法访问。
publicintgetColor()returncolor;publicintgetSize()returnsize;外界通过对象的这些方法访问对象的属性对同一封装中的属性进行处理的方法可通过该方法获取私有成员变量的值私有成员变量的值私有变量可以被私有变量可以被该类自身所访问和修改该类自身所访问和修改setColor(intx)color=x;setSize(intx)size=x;对封装中的属性进行处理的方法可通过该方法设置私有成员变量的值私有成员变量的值可通过该方法设置私有成员变量的值私有成员变量的值对象中应设计有对同一封装中的属性进行存、取等处理的方法。
使外界可以通过对象的方法访问对象的属性classAppTVtvA=newTV(0,220,29);TVtvB=newTV(2,220,34);.tvA.setColor(7);System.out.println(“SizeoftvBis”+tvB.getSize();.外界通过对象的方法访问对象的属性外界通过对象的方法访问对象的属性.3友好变量和友好方法友好变量和友好方法缺省的访问通常称为友好访问,缺省的访问通常称为友好访问,这种访问不用修饰符(这种访问不用修饰符(private、public、protected)进行修饰。
)进行修饰。
缺省缺省访问控制访问控制假如一个类无访问控制符假如一个类无访问控制符就具有包访问控制特性就具有包访问控制特性友好访问友好访问也称为也称为包访问性包访问性不用修饰符的成员变量和方法被称为友好变量和友好方法。
缺省缺省访问控制访问控制包访问性包访问性:
规定规定友好变量和和友好方法方法只能被同一个包中的其他类只能被同一个包中的其他类,所访问和调用。
所访问和调用。
缺省缺省访问控制访问控制如:
如:
classTomintweight;intf(inta,intb).classBobvoidg()Tomcat=newTom();cat.weight=23;cat.f(3,4);友好的float型变量方法f是友好方法缺省缺省访问控制访问控制如:
如:
classTomintweight;intf(inta,intb).classBobvoidg()Tomcat=newTom();cat.weight=23;cat.f(3,4);设:
类设:
类Bob与类与类Tom在同一个包中,在同一个包中,则对象cat能访问自己的友好变量和友好方法。
缺省缺省访问控制访问控制如:
如:
classTomintweight;intf(inta,intb).classBobvoidg()Tomcat=newTom();cat.weight=23;cat.f(3,4);友好访问允许我们将相关的类都组合到同一个友好访问允许我们将相关的类都组合到同一个文件夹内(即同一个包内),方便它们的友好成员之文件夹内(即同一个包内),方便它们的友好成员之间相互访问。
我们便间相互访问。
我们便“拥有拥有”了那个包内的代码。
了那个包内的代码。
缺省缺省访问控制访问控制在任何一个与Tom同一包中的类中,都可以通过Tom类的类名访问Tom类的友好的类变量和友好的类方法。
案例classTomstaticfloatweight;staticfloatf(floata,floatb)floatc;c=a+b;returnc;classBobfloatx,y;voidg()x=Tom.weight;y=Tom.f(10,20);通过Tom类的类名访问友好的类变量和友好的类方法缺省缺省访问控制访问控制注:
注:
1在在同同一一源源文文件件中中编编写写命命名名的的类类总总是在同一包中的。
是在同一包中的。
2如如果果源源文文件件中中用用import语语句句引引入入了了另另外外一一个个包包中中的的类类,并并用用该该类类创创建建了了一一个个对对象象,那那么么该该类类的的这这个个对对象象将将不不能能访问自己的友好变量和友好方法。
访问自己的友好变量和友好方法。
【例例】:
定义了一个名为:
定义了一个名为dessert的包:
的包:
packagedessert;publicclassCookiepublicCookie()System.out.println(Cookieconstructor);voidfoo()System.out.println(foo);文件Cookie.java必须驻留在名为dessert的一个子目录内importdessert.*;publicclassDinnerpublicDinner()System.out.println(Dinnerconstructor);publicstaticvoidmain(Stringargs)Cookiex=newCookie();/!
x.foo();/Cantaccess可以创建一个Cookie对象,因为它的构建器是public的,而且类也是public的。
然而,foo()成员不可在Dinner.java内访问,因为foo()只有在dessert包内才是“友好”的。
importdessert.*;publicclassDinnerpublicDinner()System.out.println(Dinnerconstructor);publicstaticvoidmain(Stringargs)Cookiex=newCookie();/!
x.foo();/Cantaccess包访问性实际上给出了一种访问限制,对于其包访问性实际上给出了一种访问限制,对于其它包中的用户来说,是不能访问当前包中的它包中的用户来说,是不能访问当前包中的“友好友好”成员的。
这种效果往往能令人满意,因为默认访成员的。
这种效果往往能令人满意,因为默认访问是我们通常采用的方法,默认的问是我们通常采用的方法,默认的“友好友好”包访问包访问通常已经是一种适当的隐藏方法。
通常已经是一种适当的隐藏方法。
.4受保护的成员变量和方法受保护的成员变量和方法用用protected修饰的成员变量修饰的成员变量和方法被称为受保护的成员变量和受和方法被称为受保护的成员变量和受保护的方法。
保护的方法。
protected关键字为我们引入关键字为我们引入了一种名为了一种名为“继承继承”的概念的概念.4受保护的成员变量和方法受保护的成员变量和方法用用protected修饰的成员变量修饰的成员变量和方法被称为受保护的成员变量和受和方法被称为受保护的成员变量和受保护的方法。
保护的方法。
若一个类继承了另一个类,则两个类若一个类继承了另一个类,则两个类不论是否在同一个包中,子类能够访问父不论是否在同一个包中,子类能够访问父类的类的protected成员。
成员。
classTomprotectedfloatweight;protectedfloatf(floata,floatb)classBobextendsTomvoidg()Tomcat=newTom();cat.weight=23f;/合法。
cat.f(3,4);/合法。
以下程序中,类Bob与Tom在同一个包中packagetom.jf;classTomprotectedfloatweight;protectedfloatf(floata,floatb)package;importtom.jf.Tom;classBobextendsTomvoidg()Tomcat=newTom();cat.weight=23f;/合法cat.f(3,4);/合法。
以下程序中,类Bob与Tom不在同一个包中packagetom.jf;classTomprotectedfloatweight;protectedfloatf(floata,floatb)package;importtom.jf.Tom;classBobextendsTomvoidg()Tomcat=newTom();cat.weight=23f;/合法cat.f(3,4);/合法。
以下程序中,类Bob与Tom不在同一个包中子类继承了父类的子类继承了父类的protected的成员变的成员变量和方法作为自己的成员变量和方法量和方法作为自己的成员变量和方法.4受保护的成员变量和方法受保护的成员变量和方法用用protected修饰的成员变量修饰的成员变量和方法被称为受保护的成员变量和受和方法被称为受保护的成员变量和受保护的方法。
保护的方法。
protected提供一个特殊的权限,允许访提供一个特殊的权限,允许访问衍生类。
这是一种以现有的类(父类)为基问衍生类。
这是一种以现有的类(父类)为基础,产生一个新类(子类)的机制。
础,产生一个新类(子类)的机制。
.4受保护的成员变量和方法受保护的成员变量和方法用用protected修饰的成员变量修饰的成员变量和方法被称为受保护的成员变量和受和方法被称为受保护的成员变量和受保护的方法。
保护的方法。
.5public类与友好类类与友好类类声明时,如果关键字类声明时,如果关键字class前面加上前面加上public关键字,就称这样的类是一个关键字,就称这样的类是一个public类类。
public类表示可以在任何另外一个类中,使用public类创建对象如publicclassA.5public类与友好类类与友好类如果一个类不加public修饰,如:
classA这样的类称做友好类,那么另外一个类中使用友好类创建对象时,要保证它们是在同一包中。
对于类的访问只有两个选择:
对于类的访问只有两个选择:
“友好的友好的”或者或者public。
封装性是面向对象程序设计技术的一个重要概念类的封装性类的封装性封装性:
封装性:
即以对象的形式将数据和对数据的操作结合在即以对象的形式将数据和对数据的操作结合在一起,形成一个不可分割的独立的实体。
该对象对一起,形成一个不可分割的独立的实体。
该对象对外形成一个清楚的界限,对象的所有私有成员和私外形成一个清楚的界限,对象的所有私有成员和私有方法的实现细节都被封装在该界限以内。
有方法的实现细节都被封装在该界限以内。
类的封装性类的封装性封装性:
封装性:
由于受到封装壳的保护,其他的对象不能直接访由于受到封装壳的保护,其他的对象不能直接访问和修改本对象所拥有的所有私有成员和私有方法。
问和修改本对象所拥有的所有私有成员和私有方法。
为了方便外部对象的访问,对象提供有限的对外为了方便外部对象的访问,对象提供有限的对外服务界面并使之与外部发生联系,外部对象对它的访服务界面并使之与外部发生联系,外部对象对它的访问只能通过该界面进行,也就是说通过该界面向该对问只能通过该界面进行,也就是说通过该界面向该对象发送消息。
象发送消息。
类的封装性类的封装性类的封装性编程:
类的封装性编程:
对象中的属性一般应设计为只能被同一对象中对象中的属性一般应设计为只能被同一对象中的方法访问。
对象中应设计有对同一封装中的属的方法访问。
对象中应设计有对同一封装中的属性进行存、取等处理的方法。
外界通过对象的方性进行存、取等处理的方法。
外界通过对象的方法访问对象的属性。
这是面向对象编程的一个重法访问对象的属性。
这是面向对象编程的一个重要思想。
要思想。
类的封装性类的封装性class银行帐户privateString帐号,姓名,身份证,密码;privatefloat余额;银行帐户(String帐号,String姓名,String身份证,String密码,float余额)this.帐号=帐号;this.姓名=姓名;this.身份证=身份证;this.密码=密码;this.余额=余额;publicfloat查余额(String存折帐号,String身份证)if(帐号=存折帐号&this.身份证=身份证)return余额;/外界通过对象的这些方法访问对象的属性float存款(String存折帐号,float存款额)if(存折帐号=帐号)余额=余额+存款额;return存款额;/外界通过对象的这些方法/对同一封装中的属性进行存取处理。
float取款(String存折帐号,String密码,float取款额)if(存折帐号=帐号&this.密码=密码)余额=余额-取款额;return取款额;/外界通过对象的这些方法/对同一封装中的属性进行存取处理。
void改密码(String存折帐号,String原密码,String新密码)if(存折帐号=帐号&密码=原密码)密码=新密码;/外界通过对象的这些方法/对同一封装中的属性进行修改。
classExa2_26publicstaticvoidmain(Stringargs)银行帐户用户1=new银行帐户(12345678,赵刚,12345678,642987,10000);银行帐户用户2=new银行帐户(22345678,刘英,12345678,713865,20000);System.out.println(余额+用户1.查余额(12345678,12345678);System.out.println(取款+用户1.取款(22345678,642987,2000);.classExa2_26publicstaticvoidmain(Stringargs)System.out.println(存款+用户2.存款(22345678,1000);用户2.改密码(22345678,713865,236578);System.out.println(改密码已经完成!
);结果:
结果:
余额余额10000.0取款取款2000.0存款存款1000.0改密码已经完成!
改密码已经完成!
银行帐户类是对一类银行帐户的状态描述和方法银行帐户类是对一类银行帐户的状态描述和方法的定义。
类把数据和对数据的操作封装成一个整体。
的定义。
类把数据和对数据的操作封装成一个整体。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 语言 程序设计 第三 03 访问 权限 封装