引言:
在咱们之前写的程序中,Person类的name和age属性,在类的外部,主方法中,或者其他地方都可以直接调用这个属性,这显得于有些不合理。
举个现实生活中的栗子:
对于银行可这个类来说,银行卡的卡号,余额,密码,这三个属性。
如果这三个属性直接暴露在外部,这就会很不安全,不能让这些属性通过对象就被外部直接访问了。
再举个栗子:
对于汽车这个类来说,车从熄火到发动起起来,是需要很多个属性之间相互配合。这些属性对于我们用户来说,是不可见的,也是我们不关注的。
只需要用钥匙一键启动(也就是我们编程中的方法),方法的内部把这些程序来进行一个调配和操作,车就启动了,我们不关心内部过程。
面向对象一共有三大特性 :封装,继承和多态。
我们首先介绍
封装
,继承和多态我们会在后边的博文中介绍~~
封装的特性
:这里我们只介绍两个重要的特性——保护性和易用性,保护性就是上面银行卡的例子,而易用性体现在汽车那个例子。
用private实现属性和方法的封装只是封装中的一种
(这点很容易会让人误以为封装只有private)。
在Java中,所谓的权限修饰符,指的是被修饰的属性,方法,类可见的范围有多大。
一共有
四大访问权限修饰符
,从小到大的顺序依次为:
private < default < protected < public
private
:被private修饰的属性和方法,只能在当前类的内部可见,出了当前类的内部,也就是出了 {} ,对外部就完全隐藏了。
default
:这个关键字不需要写额,什么权限也没有,就是个包访问权限。
protected
:这个关键字会在后边的博文中,等讲到多态和继承时候介绍到。
public
:被public修饰的东东,在当前程序(项目)中都是可见的,都是可以使用的。
提出问题:
private关键字能否修饰一个类?
答:
private关键字一定不能修饰外部类
,类定义的目的就是为了产生对象,让外部来使用, private修饰一个类,外部根本不知道,还怎么用。而且会
编译出错
!!!
private 修饰符的应用
范例1:
范例2:
范例3:
getter 和 setter 方法
那么问题来了,如果在类的外部想要访问这些私有属性或者方法怎么办呢???
这时就需要使用类提供的 getter(取值)和 setter(修改值)方法!
在IDEA使用快捷键 Alt + intsert 快捷生成~~
到底哪些属性需要提供getter,让外部可见,哪些属性需要提供setter,让外部修改,这个要根据属性的特征来决定。
这两个方法其实就是普通的成员方法,只是命名上有规则~~
拿上边的银行卡那个类来举例:
银行卡卡号只可取而不可修改的,银行卡的余额也是只可取而不可修改的,
银行卡的密码是既可取也可以修改的。
所以银行卡号和卡里的余额要用到getter方法,而银行卡密码要用到getter和setter方法。
阿里编程规范:
Java中所有的成员变量一律使用private封装,并且根据属性的实际情况对外提供getter和setter方法。
未完待续…