Java基础学习day14【谷】

Java基础学习day14

abstract关键字的使用

1.abstract:抽象的
2.abstract可以用来修饰的结构:类、方法
3.abstract修饰类:抽象类

此类不能实例化
抽象类中一定有构造器,
便于子类实例化时调用(涉及:子类对象实例化的全过程)
开发中,都会提供抽象类的子类,让子类对象实例化,完成相关的操作
4.abstract修饰方法:抽象方法
抽象方法只有方法的声明,没有方法体
包含抽象方法的类,一定是一个抽象类。反之,抽象类中可以没有抽象方法的。

若子类重写了父类中的所有的抽象方法后,此子类方可实例化
若子类没有重写父类中的所有的抽象方法,则此子类也是一个抽象类,需要使用abstract修饰

abstract注意点

abstract不能去修饰方法和构造器

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

练习

编写一个Employee类,声明为抽象类,
包含如下三个属性:name,id,salary。
提供必要的构造器和抽象方法:wok()
对于Manager类来说,他既是员工,还具有奖金(bonus))的属性。
请使用继承的思想,设计CommonEmployee类和Manager类,要求类中提供必要的方法进行属性访问。

抽象父类Employee

public abstract class Employee {
   
    private String name;
    private int id;
    private int salary;

    public Employee(String name, int id, int salary) {
   
        this.name = name;
        this.id = id;
        this.salary = salary;
    }

    public abstract void work();
}

子类CommonEmployee

public class CommonEmployee extends Employee{
   

    public CommonEmployee(String name, int id, int salary) {
   
        super(name, id, salary);
    }

    @Override
    public void work() {
   
        System.out.println("普通员工正在工作...");

    }
}

子类Manager

public class Manager extends Employee{
   
    private int bonus;

    public Manager(String name, int id, int salary, int bonus) {
   
        super(name, id, salary);
        this.bonus = bonus;
    }

    @Override
    public void work() {
   
        System.out.println("我是经理,我正在工作...我的奖金是:"+bonus);
    }
}

练习二

编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现某个
Employee对象的生日,则将该雇员的工资增加100元。
实验说明:
(1)定义一个Employee类,该类包含:
private成员变量name,number,birthday,其中birthday为yDate类的对象;
abstract方法earnings():
toString()方法输出对象的name,number和birthday。
(2)MyDate类包含:
private成员变量year,month,day;
toDateString()方法返回日期对应的字符串:Xxxx年xx月x日
(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对象的生口,还要输出增加工资信息。

public abstract class Employee {
   
    private String name;
    private int number;
    private MyDate birthday;
    public abstract int earning();

    public Employee(String name, int number, MyDate birthday) {
   
        this.name = name;
        this.number = number;
        this.birthday = birthday;
    }

    public MyDate
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值