面向对象特征之一:封装与隐藏
一丶★ 为什么需要封装?封装的作用和含义?、
▲我要用洗衣机,只需要按一下开关和洗涤模式就可以了,有必要了解洗衣机内部的结构吗?有必要碰电动机吗?
▲我要开车,只需要启动钥匙即可,有必要了解车的内部结构吗?有必要了解车发动机的工作原理吗?
★ 我们程序设计追求“高内聚,低耦合”。
▲高内聚:类的内部数据操作细节自己完成,不允许外部干涉
▲低耦合:仅对为暴露少量的方法用于使用
★ 隐藏对象内部的复杂性,只对外公开简单的接口,便于外界调用,从而提高系统的可扩展性丶可维护。通俗的说,把该隐藏的隐藏起来,该暴露的暴露出来。
这就是封装性的设计思想。
二丶★ 问题的引入:
当我们创建一个类的对象以后,我们可以通过“对象.属性”的方式,对对象的属性进行赋值。这里,赋值操作要受到属性的数据类型和存储范围的制约。除此之外,没有其他制约条件。但是,实际问题中,我们往往需要给属性赋值,加入额外的限制条件。这个条件就不能在属性声明时体现,我们只能通过方法进行限制条件的添加。(比如:setname()),同时,我们需要避免用户再使用“对象.属性”的方式对属性进行赋值。则需要将属性声明为私有的(private)。
------>此时,针对与属性就体现了封装性。
三丶★封装性的体现:
①: 我们将类的属性xxx私有化(private),同时,提供公共的(public)方法来获取(getxxx)和设置(setxxx)此属性的值。
扩展:封装性的体现:如上①
②:不对外暴露的私有的方法
③:单例模式丶丶丶
四丶★封装性的体现,需要权限修饰符来配合。
1.java规定的4种权限(从小到大排列):
private<缺省<protected<public
java权限修饰符public丶protected丶private置于类的成员定义前,用于限定对象对该类成员的访问权限。
四种访问权限修饰符
修饰符 类内部 同一个包 不同包的子类 同一个工程
private yes
(缺省) yes yes
protected yes yes yes
public yes yes yes yes
对于class(类)的权限修饰只可以用public和default(缺省)
▲public类可以在任意地方被访问。
▲default类只可以被同一个包的内部类访问。
2.4种权限可以用来修饰类及类的内部结构:
属性丶方法丶构造器丶内部类
修饰类的话,只能使用:缺省丶public。
总结封装性:java提供了4种权限修饰符来修饰类及类的内部结构,体现类及类的内部结构在被调用时的可见性的大小。
五丶★static关键字
public static String name;
对象间数据是不共享的除非该数据用了static修饰了
static:共享没有必要私有
所以static可以直接通过类名调用 Student.name
如果在调用完被赋值则整个值都将被更改,牵一发而动全身。
六丶★构造器(或构造方法)
类的结构之三:构造器(或构造方法:constructor)的使用
construct:建设丶建造 constrction:ccb constructor:建设者
1.构造器的作用:
①:创建对象
②:初始化对象的属性
2.说明:
①:如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器
②:定义构造器的格式:权限修饰符 类名 (形参列表){}
③:一个类中定义多个构造器,彼此构成重载
④:一旦我们显示的定义了类的构造器之后,系统就不再提供默认的空参构造器
⑤:一个类中,至少会有一个构造器
3.构造器的特点:
①:必须和类的名称相同
②:必须没有返回值,也不能写void
③:使用new关键字,本质是在调用构造器
④:用来初始化值
⑤:如果在类中没加入任意构造器,编译后会自动加入空构造(无参构造器);若已加入构造器,编译后则不会自动加入
⑥:构造器可以存在return,return有选择的跳出构造器
⑦:alt+insert 自动生成构造器
注意点:
定义有参构造之后,如果想使用无参构造,显示的定义一个无参的构造
4.属性赋值的先后顺序:
①:默认初始化
②:显示初始化
③:构造器中赋值
④:通过“对象.方法”或“对象.属性”的方式赋值
以上操作的先后顺序:①>②>③>④
七丶★类图
八丶Java Bean
1丶Java Bean是一种Java语言写成的可重用组件
2丶所谓JavaBean,是指符合如下标准的Java类:
①:类是公共的
②:有一个无参的公共的构造器
③:有属性,且有对应的get丶set方法
3丶用户可以使用JavaBean将功能丶处理丶值丶数据库访问和其他任何可以用Java代码创造的对象进行打包,并且其他的开发者可以通过内部的Jsp页面丶servlet丶其他JavaBean丶applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。
练习小作业:
1丶创建一个学生类丶教师类给他们丰富好属性以及方法丶构造方法
2丶根据题目1的构造方法构造出三个学生三个老师
3丶实现这三个老师跟三个学生彼此一对一教学