第3章_this 内部类 访问权限 包
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.7 自定义包(续)
1.创建包 定义包语句的格式为:package <包名>;
必须写在Java源程序的第一行。 如果源程序中省略了package语句,那么源文件中的类经编译后放在 与源程序相同的一个无名包中。
一个包中还可以定义子包,可由标识符加“.”分割而成,如: package china.anhui.hefei;
第3章 类与对象(封装、包、权限)
教学内容
封装 包的概念 访问权限
为什么要使用封装
下面代码有什么问题?
Dog d = new Dog(); d.health = 1000;
不合理的赋值
如何解决上面设计的缺陷?
使用封装
什么是封装
面向对象三大特征之一——封装
封装的概念
封装:将类的某些信息隐藏在类内部,不允许外部程序直接访 问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
如果在china.anhui.hefei包中存放一个名叫Student的类,则该类 的全名应为:china.anhui.hefei.Student。
3.7 自定义包(续)
2. 使用包
包中存放的是编译后的字节码文件。用户可以在编程时,通过
import语句导入包中的类,从而直接使用导入的类。 import语句的使用分两种情况: ① 导入某个包中的所有类,如:import mypackage.*; ② 导入某个包中的一个类,如:import mypackage.Student;
用关键字public修饰的成员变量和成员方法 公有的变量和方法通常定义在公共类中,不管是否处于同 一个包,公共类对象能访问自己的公有的变量和方法。如:
public class A { public int x; public void printX() { …… } ……
}
3.8访问权限(续)
3.8访问权限(续)
2. 成员变量和成员方法的访问权限
(1)私有的变量和方法:
关键字private修饰的成员变量和成员方法 私有的成员只在本类中有效 从类的封装性来说,成员变量大多定义为私有,而成员方法 往往是类的对外的访问接口,定义为私有就失去了意义。
3.8访问权限(续)
(2)公有的变量和方法:
3.8访问权限
(2)构造方法的访问权限
类中默认构造方法的访问权限和类的访问权限保持一致。
当用户自定义构造方法时,也要保证其访问权限与类相同。 因此,构造方法一般只用public和缺省两种权限修饰符。当 public类的构造方法的访问权限缺省时,在不同包的类中,是不 能用此构造方法来创建对象的。
(3)友好的变量和方法:
不使用任何访问权限修饰符 修饰的成员变量和成员方法
友好成员通常定义在友好类 中,友好成员的有效范围是 同包中的类。
如:
class A { int x; void printX() { …… } …… } class B { void g() { A a=new A(); a.x=10; a.printX(); } }
3.8访问权限(续)
(4)受保护的变量和方法:
关键字protected修饰的成员变量和成员方法
受保护的成员通常用在父类与子类之间,体现了继承的概念。对于同 一个包中的类,受保护的成员的用法与友好成员相同,对于不同包中 的类,只有子类对象才能访问受保护的成员。如: public class A { protected int x; protected void printX() { …… } …… }
- name:String - health:int 设为private - love:int - strain:String
3.7 自定义包
包(package):一个包对应一个文件夹,一 个包中可以放置许多类文件和子包。
方便软件的维护和资源的重用源自文库 Java语言规定:同一个包中的文件名必须唯一,不 同包中的文件名可以相同。
封装的好处
只能通过规 定方法访问 数据
隐藏类的 实现细节 方便加入控 制语句
方便修改实现
如何使用封装
Dog
封装的步骤
class Dog { private String name = "旺财"; // 昵称 修改属性的可见性 private int health = 100; // 健康值 1 private int love = 0; // 亲密度 + print():void private String strain = "拉布拉多犬"; // 品种 + setHealth():void public int getHealth() { 用于属性的 + getHealth():int return health; 2 读写 … … 创建getter/setter方法 } 3 public void setHealth (int health) { if (health > 100 || health < 0) { 对属性值的 this.health = 40; 合法性进行 this代表 System.out.println(" 在getter/setter 方法中 0和100 健康值应该在 之间,默认值是40"); 判断 当前对象 } else 加入属性控制语句 this.health = health; } // 其它getter/setter方法 }
3.8访问权限
1. 类与构造方法的访问权限
(1)对类的访问权限的控制只有两种: public类和友好类 public类 例如: public class A { …… } 用public修饰符修饰的类称为公共类,公共类可以被任何包中的类访问。 友好类:另一种是不加任何访问权限修饰符,例如: class A { …… } 如果在另一个类中使用友好类,一定要保证它们在同一个包中。
3.8访问权限
当类存放到不同的包中,对类及其成员的访问将受到其访问权限的限制
访问修饰符
private 默认(friendly) protected public
本类
√ √ √ √
同包
√ √ √
子类
其他
√ √ √
类和构造方法的访问权限只能是:public(任何类)和缺省的(本包中的类); 类中的成员的访问权限可以是上述的四种。