Java -----多态、抽象类

多态:指一个程序中同名的不同方法共存的情况。指“一种定义,多种实现”。面向对象的程序中多
态的情况有两种:
1、静态多态 (编译时多态):利用重载在同一个类中定义多个同名的不同方法。
2、动态多态 (运行时多态) :通过子类对父类方法的覆盖实现,有时也叫方法重写
抽象方法:一种特殊的方法【只有声明,没有具体的实现(即方法的主体被省略)】
3、 抽象方法的声明格式:[权限修饰符] abstract 返回值类型 方法名 (参数列表);
例: public abstract void draw();
抽象方法声明只需给出方法头,不需要方法体,直接以“;”结束。
抽象方法的访问权限不可以是private,一般定义为public或者protected
构造方法不能声明为抽象方法。
抽象类(abstract class):用abstract修饰符声明的类
声明格式:[权限修饰符] abstract class 类名
{
类体
}
注:
1、抽象类中不一定包含抽象方法。但包含抽象方法的类必需要声明为抽象类。
2、抽象类不能实例化。
3、抽象类的子类只有覆盖父类的所有抽象方法后,才能创建子类对象;如果父类中有一个抽象方法未在子类中被覆盖,该子类也必须被声明为抽象类。
向上转型的具体应用:方法的形式参数是父类类型,方法调用时实际参数可以是任何子类对象。
示例:
1、
编写Emplyee类:为抽象类,保存在Company包中
(1)属性:姓名、工号、工作天数。
(2)构造方法:有参构造方法:根据传递的参数,设置姓名、工号、工作天数的值。
(3)抽象方法salary:无参,返回值为double类型。

package Company;

public abstract class Emplyee {
	String name;
	int munber,day;
	public Emplyee(String n,int m,int d){
		name=n;munber=m;day=d;
	}
	public abstract double salary();

}

2、
编写TemporaryEmplyee(临时工)类:继承Emplyee类,保存在Company包中
(1)编写构造方法,实现姓名、工号、工作天数的初始化。
(2) 实现抽象方法salary( ),计算并返回工资,计算公式为:基本工资(2000)+工作天数*300

package Company;

public class TemporaryEmplyee extends Emplyee{
	public TemporaryEmplyee(String n,int m,int d) {
		super(n,m,d);
	}
	public  double salary() {
		System.out.print("公司应付"+name+" ");
		return (double)(2000+day*300);
	}

}

3、
RegularEmployee(正式员工)类:继承Emplyee类,保存在Company包中
(1)增加属性:薪级(取值:1~5级)
(2)编写构造方法,实现姓名、工号、工作天数、薪级的初始化。
(3)实现抽象方法salary( ),计算并返回工资,计算公式为:基本工资(2000)+薪级400+工作天数300+补贴(1000)

package Company;

public class RegularEmployee extends Emplyee{
	int xingji;
	public RegularEmployee(String n,int m,int d,int x) {
		super(n,m,d);xingji=x;
	}
	public  double salary() {
		System.out.print("公司应付"+name+" ");
		return (double)(3000+xingji*400+day*300);
	}

}

4、
编写Trainee类(实习生):继承Emplyee类,保存在Company包中
(1)编写构造方法,实现姓名、工号、工作天数的初始化。
(2)实现抽象方法salary( ),工资计算公式为:工作天数*200+补贴(500)

package Company;

public class Trainee extends Emplyee{
	public Trainee(String n,int m,int d) {
		super(n,m,d);
	}
	public  double salary() {
		System.out.print("公司应付"+name+" ");
		return (double)(500+day*200);
	}

}

5、
编写EmplyeeDemo类:保存在默认包中(即不保存在Company包里)引入Company包,编写main方法:
(1)建立可保存10个Empleyee对象的数组
(2)实例化若干个TemporaryEmplyee类、RegularEmployee类、Trainee类对象并存储在数组中。
(3)分别调用这些对象的salary()方法,计算公司为每个员工应付的工资,并进行累加,把求得的公司总工资支出输出。

package 作业;
import Company.*;
public class EmplyeeDEMO {

	public static void main(String[] args) {
		Emplyee str[]=new Emplyee[10];
		str[0]=new Trainee("tom",012,30);
		str[1]=new RegularEmployee("li",012,30,2);
		str[2]=new TemporaryEmplyee("huang",012,30);
		str[3]=new Trainee("wang",012,30);
		str[4]=new RegularEmployee("lin",012,30,1);
		str[5]=new TemporaryEmplyee("chen",012,30);
		str[6]=new Trainee("wu",012,30);
		str[7]=new RegularEmployee("yu",012,30,3);
		str[8]=new TemporaryEmplyee("lu",012,30);
		str[9]=new RegularEmployee("jiang",012,30,4);
		double f=0,g;
        for(int i=0;i<str.length;i++) {
        	System.out.println((g=str[i].salary())+"元");
        	f+=g;
        }
        System.out.print("公司总共支出工资"+f+"元");
	}

}

执行结果:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值