面向对象-抽象类抽象方法及练习

网友投稿 628 2022-05-29

抽象类

用abstract关键字修饰的类,叫做抽象类

抽象类不能被实例化

抽象类是用来被继承的

抽象类的子类必须要重写父类的方法并提供方法体

抽象方法

用abstract关键字来修饰的方法,叫做抽象方法

抽象方法只有方法声明,没有实现方法,直接使用分号结尾,如:

面向对象-抽象类和抽象方法及练习

public abstract void say();

1

如果一个类中含有抽象方法,那么这个类必须被声明为抽象类

Tips:

abstract不能用来修饰变量、代码块和构造器

abstract不能用来修饰私有、静态、final方法和final类

模板方法设计模式

通过子类继承抽象类,抽象类可以作为多个子类的通用的模板,每一个子类必须重写抽象类中的抽象方法,也可以进行拓展和改造,体现了一种模板模式的设计。

通过这种方法,可以在编写一些部分内容很不确定容易改变的方法时,在父类中使用抽象方法写好,再在子类中将这些易变的方法具体化实现。

练习:

编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现某个

Employee对象的生日,则将该雇员的工资增加100元。

实验说明:

(1)定义一个Employee类,该类包含:

private成员变量name,number,birthday,其中birthday 为MyDate类的对象;

abstract方法earnings();

toString()方法输出对象的name,number和birthday。

(2)MyDate类包含:

private成员变量year,month,day ;

toDateString()方法返回日期对应的字符串:xxxx年xx月xx日

(3)定义SalariedEmployee类继承Employee类,实现按月计算工资的员工处

理。该类包括:private成员变量monthlySalary;

实现父类的抽象方法earnings(),该方法返回monthlySalary值;toString()方法输

出员工类型信息及员工的name,number,birthday。

(4)参照SalariedEmployee类定义HourlyEmployee类,实现按小时计算工资的

员工处理。该类包括:

private成员变量wage和hour;

实现父类的抽象方法earnings(),该方法返回wage*hour值;

toString()方法输出员工类型信息及员工的name,number,birthday。

(5)定义PayrollSystem类,创建Employee变量数组并初始化,该数组存放各

类雇员对象的引用。利用循环结构遍历数组元素,输出各个对象的类

型,name,number,birthday,以及该对象生日。当键盘输入本月月份值时,如果本

月是某个Employee对象的生日,还要输出增加工资信息。

提示:

//定义People类型的数组People c1[]=new People[10];

//数组元素赋值

c1[0]=new People(“John”,“0001”,20);

c1[1]=new People(“Bob”,“0002”,19);

//若People有两个子类Student和Officer,则数组元素赋值时,可以使父类类型的数组元素指向子类。

c1[0]=new Student(“John”,“0001”,20,85.0);

c1[1]=new Officer(“Bob”,“0002”,19,90.5);

数据结构 面向对象编程

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Linux驱动开发_帧缓冲设备驱动与LCD应用编程
下一篇:Zabbix的应用(5)----语法系列(3)
相关文章