版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java程序设计语言概述7.2包与访问权限7.2包与访问权限
在Java中,包(Package)
是一种用于组织和管理类、接口、枚举等代码文件的机制,类似于文件夹对文件的分类管理。它主要的作用有:
不同包中允许存在同名类。将功能相关的类组织在一起,便于协作和复用。
通过包的层级结构和访问修饰符(如public、protected、默认、private)实现封装。避免命名冲突控制访问权限提高代码可维护性01创建包01创建包请单击此处添加正文,文字是您思想的提炼,请言简意赅的阐述您的观点。单击此处添加正文,文字是您思想的提炼。单击此处添加正文,文字是您思想的提炼,请言简意赅的阐述您的观点。单击此处添加正文,文字是您思想的提炼。单击此处添加正文,文字是您思想的提炼,请言简意赅的阐述您的观点2.包名规范包的命名一般全小写字母,采用多级包名用.分隔的形式。(如ject.util)。通常采用公司域名的逆序形式,如com.google、org.apache、cn.ynou等。单击添加项标题包一般在Java文件首行声明。定义语法如下代码所示:packagecom.example.mylibrary;//包名通常为域名倒序+项目模块名
publicclassBook{...}1.定义语法包的域名结构对应文件系统的目录层级。例如,com/example/mylibrary是包路径。编译后的.class文件需按包路径存放,否则无法运行。例如,对于com.example.animals包,源文件应该放在以下目录结构中:src/└──com/
└──example/
└──animals/
├──Animal.java
├──Dog.java
└──Cat.java3.物理结构02使用包02使用包
在编码时,我们一般在代码文件的最前面使用import关键字来导入包。如果你需要使用其他包中的类或接口,可以使用import语句来导入它们。import语句应该放在package声明之后,但在类声明之前。例如:importcom.example.mylibrary.Book;//导入单个类
importcom.example.mylibrary.*;//导入包内所有类(不推荐,可能冲突)
在编码时,我们还可以使用全限定类名,这种情况下我们不用导入包,例如:com.example.mylibrary.Bookbook=newcom.example.mylibrary.Book();还可以导入静态的常量:importstaticjava.lang.Math.PI;//导入静态常量
importstaticjava.lang.Math.pow;//导入静态方法
03访问权限03访问权限在Java中,包的访问权限主要涉及类、接口、方法和变量的访问控制。Java提供了四种访问权限修饰符:private、default(无修饰符)protectedpublic。04私有变量和私有方法04私有变量和私有方法
在Java中,private访问修饰符用于将变量和方法限制在定义它们的类内部。这意味着这些变量和方法只能在它们所属的类中被访问,而不能被其他类(包括子类)直接访问。这种访问限制是封装的重要体现,有助于隐藏类的内部实现细节,保护数据的安全性。04私有变量和私有方法1.私有变量
私有变量是类的内部数据,只能在类的内部被访问和修改。
私有变量通常用于存储类的状态,防止外部直接访问和修改,从而避免数据被意外破坏。例如:publicclassPerson{privateStringname;//私有变量privateintage;//私有变量
//构造器publicPerson(Stringname,intage){=name;this.age=age;}//获取姓名publicStringgetName(){returnname;}//设置姓名publicvoidsetName(Stringname){=name;}//获取年龄publicintgetAge(){returnage;}//设置年龄publicvoidsetAge(intage){this.age=age;}}04私有变量和私有方法2.私有方法
私有方法是类的内部行为,只能在类的内部被调用。私有方法通常用于实现类的内部逻辑,防止外部直接调用这些方法,从而隐藏实现细节。例如:
publicclassCalculator{//私有方法,用于计算两个数的和privateintadd(inta,intb){returna+b;}//私有方法,用于计算两个数的差privateintsubtract(inta,intb){returna-b;}//公有方法,用于执行计算任务publicvoidperformCalculations(intx,inty){intsum=add(x,y);//调用私有方法intdifference=subtract(x,y);//调用私有方法System.out.println("和:"+sum);System.out.println("差:"+difference);}}05友好变量和友好方法05友好变量和友好方法
在Java中,友好变量和友好方法(也称为默认访问权限)是指没有明确使用访问修饰符(如private、protected或public)的变量和方法。这种访问权限的默认行为是包内访问,即它们只能在同一个包内被访问。例如:友好权限与protected的区别在于:
protected:允许同一包内的类访问,且允许不同包的子类继承访问。
友好权限:仅限同一包内的类访问,子类在不同包中无法继承。packagecom.example.util;publicclassStringUtils{//友好变量(默认包级私有)
staticfinalStringDEFAULT_SEPARATOR=",";//友好方法(默认包级私有)
staticStringformat(String[]parts){returnString.join(DEFAULT_SEPARATOR,parts);}}//同一包内的其他类可访问
publicclassTest{publicstaticvoidmain(String[]args){String[]arr={"A","B","C"};Stringresult=StringUtils.format(arr);//允许调用
System.out.println(StringUtils.DEFAULT_SEPARATOR);//允许访问
}}06公有变量和公有方法06公有变量和公有方法
在Java中,公有变量(PublicVariable)和公有方法(PublicMethod)是访问权限最开放的类成员,使用
public
修饰符声明,允许所有类(包括不同包的类)直接访问。公有变量和方法可以被任何类访问,无论是否在同一个包中。若类是
public
的,其公有成员甚至可被其他项目的代码调用。例如:公有权限与友好权限的区别在于:
Public:既允许同一包内的类访问,也允许不同包访问。
友好权限:仅限同一包内的类访问,在不同包中无法访问。packagecom.example.model;publicclassPerson{//公有变量
publicStringname;//公有方法
publicvoidintroduce(){System.out.println("我叫"+name);}}//其他包中的类
packagecom.example.test;importcom.example.model.Person;publicclassMain{publicstaticvoidmain(String[]args){Personperson=newPerson();="张三";//允许直接修改公有变量
roduce();//允许调用公有方法
}}06公有变量和公有方法
尽管公有变量和公有方法可以被广泛访问,但过度使用public可能会破坏封装性。
为了保持良好的封装性,建议将变量定义为private,并通过public方法(如getter和setter)来访问和修改这些变量。01封装性
公有方法通常用于定义类的行为,例如业务逻辑、计算等。
公有变量通常用于定义类的状态,但为了保护数据的安全性,建议使用private变量并通过public方法来访问。02合理使用
类和接口通常使用public修饰符,以便它们可以在其他包中被访问。
如果类或接口没有访问修饰符,则默认为default(友好),只能在同一个包内被访问。公有权限与友好权限的区别在于:
Public:既允许同一包内的类访问,也允许不同包访问。
友好权限:仅限同一包内的类访问,在不同包中无法访问。03类和接口的访问权限注意事项07受保护的成员变量和方法07受保护的成员变量和方法
在Java中,受保护的成员变量和方法使用protected修饰符声明,其访问权限介于
public(完全开放)和
默认(包级私有)之间,旨在实现类层次结构内的共享与封装。它的访问规则是:
同一包内,所有类均可直接访问protected成员,无论是否存在继承关系。
不同包中的子类,允许访问继承的protected成员(通过子类自身实例或super关键字)。禁止通过父类实例直接访问protected成员。
protected权限适用于子类扩展功能的场景,父类定义protected方法或变量,允许子类重写或复用逻辑。例如,抽象类中定义protectedabstractvoidinit(),要求子类实现初始化逻辑。也适用在工具类中定义protected成员,供同一包内的其他类使用,同时限制外部包访问的场景。07受保护的成员变量和方法//包com.example.core中的父类
packagecom.example.core;publicclassAnimal{protectedStringname;protectedvoideat(){System.out.println(name+"正在进食...");}}//包com.example.pet中的子类(不同包)
packagecom.example.pet;importcom.example.core.Animal;publicclassDogextendsAnimal{publicvoidsetName(Stringname){=name;//合法:访问继承的protected成员
super.eat();//合法:通过super调用父类方法
}publicvoidaccessParentInstance(){Animalanimal=newAnimal();="Tom";//非法:不同包中不能通过父类实例访问protected成员
animal.eat();//非法
}}08项目演练08项目演练项目名称:智能交通工具管理系统场景设计:
某交通管理部门推出一个交通工具管理系统,用于管理不同类型的交通工具。每种交通工具都有固定的属性,如名称和速度。系统可以记录交通工具的运行信息,并根据类型提供相应的提示信息。设计要求:1.交通工具对象创建后不可修改属性(体现运行记录的确定性)。2.通过方法调用实现运行记录的验证。3.展示对象间的协作与责任意识。08项目演练1.包结构2.接口和类:项目结构com.example.transport:包含主程序和交通工具接口。com.example.transport.types:包含不同类型的交通工具类。com.example.transport.util:包含工具类,如运行记录验证工具。Transport接口:定义交通工具的基本行为。Car、Bike、Train类:实现Transport接口,分别代表汽车、自行车和火车。TransportManager类:用于管理交通工具的运行记录。TransportSystem类:主程序,用于创建交通工具对象并记录运行信息。08项目演练1.定义Transport接口Transport.java//文件路径:src/com/example/transport/Transport.javapackagecom.example.transport;publicinterfaceTransport{StringgetName();//获取交通工具名称intgetSpeed();//获取速度voidrun();//运行方法}08项目演练2.实现不同类型的交通工具类Car.java、Bike.java、Train.java//文件路径:src/com/example/transport/types/Car.javapackagecom.example.transport.types;importcom.example.transport.Transport;publicclassCarimplementsTransport{privatefinalStringname="汽车";privatefinalintspeed=120;//单位:公里/小时@OverridepublicStringgetName(){returnname;}@OverridepublicintgetSpeed(){returnspeed;}@Overridepublicvoidrun(){System.out.println(name+"正在运行,速度:"+speed+"公里/小时");}}//文件路径:src/com/example/transport/types/Bike.javapackagecom.example.transport.types;importcom.example.transport.Transport;publicclassBikeimplementsTransport{privatefinalStringname="自行车";privatefinalintspeed=15;//单位:公里/小时@OverridepublicStringgetName(){returnname;}@OverridepublicintgetSpeed(){returnspeed;}08项目演练2.实现不同类型的交通工具类Car.java、Bike.java、Train.java@Overridepublicvoidrun(){System.out.println(name+"正在运行,速度:"+speed+"公里/小时");}}//文件路径:src/com/example/transport/types/Train.javapackagecom.example.transport.types;importcom.example.transport.Transport;publicclassTrainimplementsTransport{privatefinalStringname="火车";privatefinalintspeed=200;//单位:公里/小时@OverridepublicStringgetName(){returnname;}@OverridepublicintgetSpeed(){returnspeed;}@Overridepublicvoidrun(){System.out.println(name+"正在运行,速度:"+speed+"公里/小时");}}08项目演练3.定义运行记录验证工具类TransportManager.java//文件路径:src/com/example/transport/util/TransportManager.javapackagecom.example.transport.util;importcom.example.transport.Transport;publicclassTransportManager{publicstaticvoidrunAndReport(Transporttransport){transport.run();System.out.println("运行报告:交通工具"+transport.ge
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 靖澄过江通道工程可行性研究项目
- 压浆料试验题目及参考答案
- 有本事来追上我:欧洲行业的生产率差异与趋同
- 某纸厂技术改造制度
- 治疗室消毒隔离规程
- 静脉炎病人的预防及护理
- 某水泥厂仓储细则
- 双胎妊娠期高血压术后护理
- 针灸治疗学狂病
- 某汽车厂技术规范细则
- 2026年《血管活性药物静脉输注护理》团体标准解读
- 七年级数学专项作业 计算题专项训练(原卷版)
- 法人业务管理制度
- 第3章 相互作用的力 章末复习(讲义)(原卷版)-2025~2026学年高一上学期物理讲与练(人教版2019必修第一册)
- 天然气管道防范第三方施工破坏安全培训课件
- 宝洁研发质量管理体系
- 人社系统窗口单位业务技能练兵比武总决赛部份题目
- 《像火箭科学家一样思考》分享
- 厨师消防安全知识培训课件
- 农光互补项目光伏发电与农业一体化方案
- 2025-2026人教版二年级数学上册全册教案
评论
0/150
提交评论