详尽分享继承和多态对应的几类问题

简介: 详尽分享继承和多态对应的几类问题

继承和多态对应的几类问题

员工薪资问题:

例:

某公司的雇员分为以下若干类: Employee:这是所有员工总的父类,属性:员工的姓名,员工的生日月份。方法:void getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励1000元。 SalariedEmployee:Employee的子类,拿固定工资的员工。属性:月薪 HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。属性:每小时的工资、每月工作的小时数 SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定。属性:月销售额、提成率 BasePlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,工资由底薪加上销售提成部分。属性:底薪。

1 //定义一个父类,包含name和birthday属性

2 public class Employee {办法

3 public String name;

4 public int birthday;

5 public void getSalary(int month){

6 }

7 }

8 //定义一个子类,第一类员工的结算工资办法

9 class SalariedEmployee extends Employee{

10 public double yx;

11 @Override

12 public void getSalary(int month){

13 if(month==birthday){

14 System.out.println(name+month+"月份工资为"+(yx+1000)+"元");

15 }else{

16 System.out.println(name+month+"月份工资为"+yx+"元");

17 }//代码效果参考:http://www.ezhiqi.com/bx/art_787.html

18 }

19 }

20 //定义一个子类,第二类员工的结算工资办法

21 class HourlyEmployee extends Employee {

22 public double hgz;

23 public double hour;

24 @Override

25 public void getSalary(int month) {

26 double gz = (hour < 160) ? (hour hgz) : (hour - 160) 1.5 + (160 hgz);

27 if (month == birthday) {

28 System.out.println(name + month + "月份工资为" + (gz + 1000) + "元");

29 } else {

30 System.out.println(name + month + "月份工资为" + gz + "元");

31 }

32 }

33 }

34 //定义一个子类,第三类员工的结算工资办法

35 class SalesEmployee extends Employee{

36 public double xse;

37 public double tcl;

38 @Override

39 public void getSalary(int month){

40 double gz=(month==birthday)?(xsetcl+1000):(xsetcl);

41 System.out.println(name+month+"月份工资为"+gz+"元");

42 }

43 }

44 //定义一个子类,第四类员工的结算工资办法

45 class BasePlusSalesEmployee extends SalesEmployee{

46 public double dx;

47 @Override

48 public void getSalary(int month){

49 double gz=(month==birthday)?(xse+tcl+dx+1000):(xse+tcl+dx);

50 System.out.println(name+month+"月份工资为"+gz+"元");

51 }

52 }

53 //定义一个测试类,并创建四个对象进行实例化操作

54 class Test2 {

55 public static void main(String【】 args) {

56 SalariedEmployee e1 = new SalariedEmployee();

57 e1.name = "张三";

58 e1.birthday = 1;

59 e1.yx = 3000;

60

61 HourlyEmployee e2 = new HourlyEmployee();

62 e2.name = "李四";

63 e2.birthday = 2;

64 e2.hgz = 10;

65 e2.hour = 160;

66 SalesEmployee e3 = new SalesEmployee();

67 e3.name = "王五";

68 e3.birthday = 3;

69 e3.xse = 100000;

70 e3.tcl = 0.1;

71 BasePlusSalesEmployee e4 = new BasePlusSalesEmployee();

72 e4.name = "赵六";

73 e4.birthday = 4;

74 e4.xse = 100000;

75 e4.tcl = 0.1;

76 e4.dx = 2000;

77 //打印四个人的名字

78 Employee【】 e = {e1, e2, e3, e4};

79 for (Employee em : e) {

80 System.out.println(em.name);

81 }

82 //打印这四人12个月来每个月的薪资情况

83 for (int i = 1; i < 13; i++) {

84 System.out.println("第" + i + "月工资表");

85 e1.getSalary(i);

86 e2.getSalary(i);

87 e3.getSalary(i);

88 e4.getSalary(i);

89 }

90 }

91 }//代码效果参考:http://www.ezhiqi.com/zx/art_4810.html

在多态中,涉及到将子类对象当做父类类型使用的情况,例如Animal animal=new dog();将子类对象当做父类使用时不需要任何显式声明,需要注意的是,此时不能通过父 类变量去调用子类中的某些方法,这时要用到对象类型转换。

instanceof关键字可以判断一个对象是否为某个类(或接口)的实例或者子类实例。

例:

1 public interface Animal {

2 void shout();

3 }

4 class Dog implements Animal{

5 public void shout(){

6 System.out.println("汪汪汪");

7 }

8 }

9 class Cat implements Animal {

10 public void shout() {

11 System.out.println("喵喵喵");

12 }

13

14 public static void main(String【】 args) {

15

16 Cat cat = new Cat();

17 Dog dog = new Dog();

18

19 animalShout(cat);

20 animalShout(dog);

21 // animal1.shout();

22 // animal2.shout();

23 / animalShout(animal1);

24 animalShout(animal2);

25 }

26 public static void animalShout(Animal animal){

27 animal.shout();

28 }/

29 }

30

31 public static void animalShout(Animal animal) {

32 if (animal instanceof Dog) { /instanceof关键字判断animalShout方法中传入的对象是否为Dog类型/

33 //Cat cat = (Cat) animal;

34 //animal.shout();

35 Dog dog = (Dog) animal;

36 animal.shout();

37 } else if(animal instanceof Cat){ /instanceof关键字判断animalShout方法中传入的对象是否为Cat类型/

38 Cat cat=(Cat) animal;

39 animal.shout();

40 }//代码效果参考:http://www.ezhiqi.com/zx/art_884.html

41 }

42 }

匿名内部类

匿名内部类是实现接口的一种简便写法,在程序中不一定非要使用匿名内部类。

格式:new 父类(参数列表)或父接口(){/匿名内部类实现部分*/}

1 //匿名内部类

2 public interface Jiaju {

3 public void name();

4

5 public class Test {

6 public static void main(String【】 args) {

7 zhidaoName(new Jiaju() {

8 @Override

9 public void name() {

10 System.out.println("我是凳子");

11 }

12 });

13 }

14 public static void zhidaoName(Jiaju a){

15 a.name();

16 }

17 }

18 }

相关文章
|
存储 编解码
ENVI_IDL:读取OMI数据(HDF5)并输出为Geotiff文件+详细解析
ENVI_IDL:读取OMI数据(HDF5)并输出为Geotiff文件+详细解析
740 1
面向对象程序设计第九章:多态
面向对象程序设计第九章:多态
256 0
|
程序员 uml
6.4 工资程序成长记:类与对象
所谓需求分析,就是搞清楚客户到底要的是一个什么样的软件。无论这个软件是用于飞天登月的大型系统,还是仅供孩子们玩的游戏程序,需求分析永远都是我们开发工作的第一步。所以,当小陈接到老板下达的任务后,他做的第一件事不是立即修改程序代码,而是先进行需求的分析,搞清楚老板到底要的是怎样一个工资程序。
1394 0
|
6天前
|
云安全 监控 安全
|
3天前
|
存储 机器学习/深度学习 人工智能
打破硬件壁垒!煎饺App:强悍AI语音工具,为何是豆包AI手机平替?
直接上干货!3000 字以上长文,细节拉满,把核心功能、使用技巧和实测结论全给大家摆明白,读完你就知道这款 “安卓机通用 AI 语音工具"——煎饺App它为何能打破硬件壁垒?它接下来,咱们就深度拆解煎饺 App—— 先给大家扒清楚它的使用逻辑,附上“操作演示”和“🚀快速上手不踩坑 : 4 条核心操作干货(必看)”,跟着走零基础也能快速上手;后续再用真实实测数据,正面硬刚煎饺 App的语音助手口令效果——创建京东「牛奶自动下单神器」口令 ,从修改口令、识别准确率到场景实用性,逐一测试不掺水,最后,再和豆包 AI 手机语音助手的普通版——豆包App对比测试下,简单地谈谈煎饺App的能力边界在哪?
|
11天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1218 7
|
4天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
362 11
|
2天前
|
人工智能
自动化读取内容,不会写爆款的普通人也能产出好内容,附coze工作流
陌晨分享AI内容二创工作流,通过采集爆款文案、清洗文本、智能改写,实现高效批量生产。五步完成从选题到输出,助力内容创作者提升效率,适合多场景应用。
212 104