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

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

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

员工薪资问题:

例:

某公司的雇员分为以下若干类: 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 }

相关文章
|
2月前
|
存储 C++ 容器
第十四章:C++虚函数、继承和多态详解
第十四章:C++虚函数、继承和多态详解
33 0
|
9天前
|
C++
C++一分钟之-继承与多态概念
【6月更文挑战第21天】**C++的继承与多态概述:** - 继承允许类从基类复用代码,增强代码结构和重用性。 - 多态通过虚函数实现,使不同类对象能以同一类型处理。 - 关键点包括访问权限、构造/析构、菱形问题、虚函数与动态绑定。 - 示例代码展示如何创建派生类和调用虚函数。 - 注意构造函数初始化、空指针检查和避免切片问题。 - 应用这些概念能提升程序设计和维护效率。
20 2
|
2月前
|
Java 程序员 编译器
Java面向对象之——继承
Java面向对象之——继承
|
2月前
|
Serverless PHP
当谈论面向对象编程时,这四个概念是非常重要的。以下是对接口、继承、封装和多态的简要说明
本文介绍了面向对象编程的四个核心概念:接口、继承、封装和多态。接口定义对象的行为规范,类通过实现接口确保符合所需行为。继承允许在已有类基础上创建新类,实现代码重用。封装是将数据和操作捆绑并隐藏内部细节,提高安全性和可维护性。多态使对象在运行时能表现出不同行为,增加代码灵活性和可扩展性。文中还提供了代码示例来说明这些概念。
16 0
|
10月前
|
Java
Java面向对象之继承
Java面向对象之继承
42 0
|
11月前
|
安全 C++
c++学习之继承
c++学习之继承
59 0
|
11月前
|
Java
Java面向对象继承
继承的概念 继承是面向对象编程中的一个概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。子类在继承父类的同时也可以添加自己的属性和方法,从而实现代码的复用和扩展。继承是面向对象编程的三大特征之一,其他两个分别是封装和多态。 继承的作用 1.提高代码的复用性:通过继承,子类可以直接使用父类的属性和方法,不需要重复定义。 2.便于代码的扩展:通过在子类中添加新的属性和方法,实现了代码的扩展。 3.提高代码的可维护性:将公共的属性和方法放在父类中,可以减少重复的代码,从而方便代码维护和升级。
62 0
|
12月前
|
设计模式
代码学习-多态
代码学习-多态
35 0
|
12月前
|
Java
【Java面向对象】继承的认识与实现(1)
【Java面向对象】继承的认识与实现(1)
69 0
重写前奏~继承和多态
上次说到的重载是指同一类中方法和方法之间的关系,这次向大家介绍的重写是子不同类中方法和方法的关系;在介绍重写之前,要先说说继承和多态;