本篇文章将对Java面向对象三大特性中的封装性进行总结,主要包括以下几个方面:
- 什么是封装性?
- 为什么要封装性?
- 怎么实现封装性?
什么是封装性
在Java中所谓的封装性就是将一个类的某些方法进行“隐藏”,其他类不能够进行调用或直接的访问。比如:如果需要实现冒泡排序的一个类,那么我们就可以将交换元素的方法进行“隐藏”。
Java中的封装性就好比是电器上的一个个按钮,作为用户而言,只需要知道按什么按钮会有什么功能就可以了,不需要知道这个功能具体的实现细节。
为什么要封装性
先看下面的代码:
这里先创建里一个animal类,里面有关于动物的姓名,年龄,有多少条手等属性,然后创建了一个display方法用于展示信息:
1 | public class animal { |
然后创建一个dog对象,并赋值展示:
1 | public static void main(String[] args) { |
毫无意外的会展示:
my name is:jone
my age is:-10
I have -10 leg
但是这样的赋值合理吗?年龄是否可以是负数?-10条腿是多少?
显然这些情况都是不合理的!这时候就需要对这些输入进行一些判断和筛选,显然,如果将数据定义成谁都可以直接访问、赋值时不合理的。这是时就需要对这些属性进行封装,让使用者不能直接访问,而是需要通过调用相应的方法,我们就可以在这些方法里面对属性进行控制,使其保持合理的状态了。
对于一些方法也是这样,我们可以通过封装,而将部分实现细节进行隐藏。
怎么实现封装
Java中的封装性是通过private关键字实现的,带有该关键字的属性、方法、构造器、内部类将只能在类内使用,在其他类中构造的对象将不能直接访问或调用。
private不可以用于类
例如,将animal类中的age代码改成如下形式:
1 | private int age; |
直接调用将会报错:
1 | dog.age = 10;//The field animal.age is not visible |
此时我们就可以通过构造相应的getter/setter方法对属性进行访问和设置:
在eclipse中可以通过alt+ shift+s,批量自动构建属性的getter/setter方法
1 | public class animal { |
此时如果进行如下调用:
1 | public static void main(String[] args) { |
此时,属性赋值将不会成功,属性将会是默认值:
my name is:null
my age is:0
I have 0 leg
通过将属性进行封装,就可以对属性进行控制,防止属性被随意设置,并且也可以在程序中明确的知道在哪里怎么设置了那个属性,使程序的可读性更强。
幕布版思维导图
本文链接: https://quandongli.github.io/post/c08b9ed0.html
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
