JAVA-初步认识-第九章-抽象类-练习
一.
照着这些已有的对象,员工,经理,创建一个模型。
什么是模型?举一个最简单的例子,用橡皮泥对着人捏一个人的模型,要照着人的特点来,捏完之后,就是一个人的模型。这模型就体现出人的特点。
对于我们见到的数据,进行模型的建立。
在java中定义模型,就是通过类来封装,类来描述就可以了。描述后,再把这些数据产生关系。
在需求当中,需求的所有内容就是问题领域。何为问题领域?我们现在做需求所涉及的问题范围。接下来,就在这个范围内,我们准备去分析,它里面涉及到的哪些对象。数据都是封装在对象里面,要涉及哪些对象。(看来建模的核心,在于确定对象)
怎么来操作?
首先,先分析在需求中,有没有对象?有几个对象?
通过名词提炼法来找出对象,不是说所有的名词都是对象。比如说需求中的公司一词,公司本身并没有封装需求中的数据,只有程序员和项目经理封装了数据,工号,薪水....
发现两者很相似,当内容重合的时候,要考虑复用。
程序员定义完姓名,工号,薪水。经理继承过来,经理就不用定义姓名,工号和薪水。程序员继承经理不太靠谱。
分析结束后,开始进行代码的编写。
对雇员类稍微进行一个解析,雇员一初始化的时候,成员变量的值就在具备。进公司后,这些属性都是要确定的,将实际参数输入到参数列表中,这就是构造函数的书写。雇员都要有工作方法,具体什么工作并不清楚,所以不写方法体,这是个抽象方法。
就这样的雇员类,进行对象的创建是没有意义的,里面的很多内容是不具体的。雇员是谁,不知道,不具体。因此,类也是抽象的。
雇员类是抽象来的,无法用它来创建对象。继承雇员类的子类,诸如程序员类,项目经理类都进行了具体化,然后用这些具体化的类来创建对象。说是具体的,实际上只是确定了有哪些成员,其数值还是不定的,需要对象亲自确定。
这里不能用this,因为雇员类中的成员变量都是私有的(为什么?由于是继承,只能借助父类来初始化)。父类中一旦把功能定义完,子类中直接调过来用就行了。子类再重新写,那就是覆盖。
父类中本身就有给变量赋值的操作,就是它的构造函数完成的。子类在构造的时候,想要使用父类构造的话,怎么办。子类中的构造函数什么都不写,里面也有一个隐式的语句,super();但是父类没有空参数的构造函数。父类中的构造函数是含有三个参数的形式,因此,我们要调用就得亲自调用。父类既然已经把它初始化完毕了,子类直接调用父类就可以了。
(对于抽象类中方法的覆盖,这个以前继承类之间方法的覆盖不一样,以前要求函数声明一致,但是这里不行,父类多出一个abstract)
这里描述经理类,有点不同,子类构造函数的参数列表中的参数多于父类构造函数中的参数个数。多出来的参数,子类自己进行初始化。
这里又回顾了一下,子类和父类之间成员的关系。简单的介绍下面截图中的内容,父类中私有化了成员变量,要想使用,就必须提供一个方法,这个方法就是父类中的构造函数。由于继承的关系,子类就不需要再次定义这些变量,而且初始化时,只需要调用父类的构造函数即可。
学生继承person之后,什么都不用做,直接拿来用就可以了。很简单,继承的复用性很强。没有必要每个类里面都写上方法,只要调用或者覆盖就可以了。