文章目录
- 一、面向对象的三大特性
- 二、封装性
- 1.什么是封装性?
- 2.为什么要有封装性?
- 3.封装性的作用
- 4.封装性的实现步骤
- 5.访问限定修饰符
一、面向对象的三大特性
面向对象的三个基本特征是:封装、继承、多态。
二、封装性
1.什么是封装性?
封装性是面向对象编程中的三大特征之一,封装性就是把对象的成员属性和成员方法结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含如下两个含义。
(1)把对象的全部成员属性和全部成员方法结合在一起,形成一个不可分割的独立单位(即对象)
(2)信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系。
2.为什么要有封装性?
(1)对象中的成员属性如果没有被封装,一旦对象创建完成,就可以通过对象的引用获取任意的成员属性的值,并能够给所有的成员属性任意赋值。在对象的外部任意访问对象中的成员属性时非常危险的,因为对象中的成员属性是对象本身具有的与其他对象不同的特征,是对象某个方面性质的表现。
(2)对象中的成员方法如果没有被封装,也可以在对象的外部随意调用,这也是一种危险的操作。因为对象中的成员方法只有部分是给外部提供的。保留有限的对外接口使之与外部发生联系。而有一些是对象自己使用的方法。
3.封装性的作用
封装的原则就是要求对象以外的部分不能随意存取对象的内部数据(成员属性和成员方法)。从而有效地避免了外部错误对它的”交叉感染”,使软件错误能够局部化,大大减少差错。
4.封装性的实现步骤
- 1.设置私有成员
只有在声明成员属性或成员方法时,使用private关键字修饰就实现了对成员的封装。封装后的成员在对象的外部不能被访问,但在对象内部的成员方法中可以访问到自己对象内部被封装的成员属性和被封装的成员方法。达到了对对象成员保护的目的,只能是对象自己使用,其他人不可以访问自己的私有成员。即尽可能隐蔽对象的内部细节,对外形成一道屏障。
例:
- 2.私有成员的访问
对象中的成员属性一旦被private关键字封装成私有之后,就只能在对象内部的成员方法中使用。不能被对象外部直接赋值,也不能再对象外部直接获取私有属性的值。如果不让用户在对象的外部设置私有属性的值,但可以获取私有属性的值,或者允许用户对私有属性赋值,但需要限制一些赋值的条件,解决的办法就是在对象的内部声明一些操作私有属性的共有方法。因为私有的成员属性在对象内部的方法中可以访问,所以在对象中声明一个访问私有属性的方法,再把这个方法通过public关键字设置为共有的访问权限.如果成员方法没有加任何访问控制修饰,默认就是public的,在任何地方都可以访问。这样,在对象外部就可以将公有的方法作为访问接口,间接地访问对象内部私有成员。
例:
提示:IEDA编译器提供了自动生成getter和setter的方法
5.访问限定修饰符
访问范围 | private | default (默认) | protected | public |
---|---|---|---|---|
同一个类 | 可访问 | 可访问 | 可访问 | 可访问 |
同一包中的其他类 | 可不访问 | 可访问 | 可访问 | 可访问 |
不同包中的子类 | 不可访问 | 不可访问 | 可访问 | 可访问 |
不同包中的非子类 | 不可访问 | 不可访问 | 不可访问 | 可访问 |
- private
私有访问修饰符是最严格的访问级别,所以被声明为 private 的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为 private。
声明为私有访问类型的变量只能通过类中公共的 getter 方法被外部类访问。
2.default (即默认,什么也不写)
使用默认访问修饰符声明的变量和方法,对同一个包内的类是可见的。接口里的变量都隐式声明为 public static final,而接口里的方法默认情况下访问权限为 public。 - protected
用保护访问控制符 protected 修饰的类成员可以被三种类所访问:该类自身、与它在同一个包中的其他类以及在其他包中的该类的子类。使用 protected 修饰符的主要作用,是允许其他包中它的子类来访问父类的特定属性和方法,否则可以使用默认访问控制符。 - public
被声明为 public 的类、方法、构造方法和接口能够被任何其他类访问。
如果几个相互访问的 public 类分布在不同的包中,则需要导入相应 public 类所在的包。由于类的继承性,类所有的公有方法和变量都能被其子类继承。