小案例分析Java中接口和抽象方法的使用
先来看看题目需求吧
模拟给所有员工发工资,
代码实现,效果如下所示:
小明的薪资为:9000.0
卡余额是:0.0
小亮的薪资为: 5000.0
卡余额是:0.0
我们先给个思路:
- 定义员工Employee类。包含属性:姓名,薪资,银行卡(保存工资)。
2. 定义经理Manager类继承Employee类,包含属性:奖金。
3. 定义职员Clerk类继承Employee类。
4. 定义Money接口,提供抽象方法salary。
5. 定义公司Company类,实现Money接口。
6. 定义测试类,创建公司对象,经理对象,职员对象,调用公司salary方法,给经理和职员发工资。
给大家普及一下接口的知识:
interface修饰(重点掌握)
接口:没有具体的定义,也没有具体的行为,用来制定规则
重点:使用接口需要注意一下几点内容哟!!!
1.接口中所有的方法默认都是public abstract修饰的,也就是抽象方法。
2.接口中不能有实现的方法(具体的方法),除了jdk1.8可以定义default修饰的方法体。
3.实现接口使用的是implements关键字。
4.实现接口就必须实现接口中所有的抽象方法。
5.接口不能直接创建对象,必须通过实现类去创建对象。
6.一个类可以实现多个接口,中间用","隔开。
7.接口不能实现接口。
8.接口可以继承接口,而且可以继承多个接口,中间用“,”隔开。
9.接口中的属性默认都是public static final修饰的,是一个常量。
我们按照步骤要求,先创建类和接口吧
- 定义员工Employee类
public class Employee {
//定义属性
private String name;
private double pay;
private double BankCard;
//利用get set方法获取和修改属性
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPay() {
return pay;
}
public void setPay(double pay) {
this.pay = pay;
}
public double getBankCard() {
return BankCard;
}
public void setBankCard(double bankCard) {
BankCard = bankCard;
}
}
- 定义经理Manager类继承Employee类
public class Manager extends Employee {
//定义奖金属性
private int Bonus;
//使用set get方法获取和修改属性
public int getBonus() {
return Bonus;
}
public void setBonus(int bonus) {
Bonus = bonus;
}
}
- 定义职员Clerk类继承Employee类
public class Clerk extends Employee{
}
- 定义Money接口,提供抽象方法salary。
public interface Money {
//抽象的方法
public void salary();
}
- 定义公司Company类,实现Money接口。
public class Company implements Money {
@Override
public void salary() {
// 创建经理的对象
Employee employee = new Employee();
// 调用父类属性进行赋值
employee.setName("小明");
employee.setPay(9800.0);
employee.setBankCard(0.0);
// 输出
System.out.print(employee.getName() + "的薪资为:" + employee.getPay() + "\t");
System.out.println("卡余额是:" + employee.getBankCard());
// 创建职员对象
Clerk clerk = new Clerk();
clerk.setName("小亮");
clerk.setPay(5600.0);
clerk.setBankCard(0.0);
// 银行卡余额等于工资加原来卡的余额
clerk.setBankCard(clerk.getBankCard());
// 输出
System.out.print(clerk.getName() + "的薪资为:" + clerk.getPay() + "\t");
System.out.println("卡余额是:" + clerk.getBankCard());
//定义月份
int month=1;
//设置循环体
while(month<13) {
// 第一个月
System.out.println("===================="+month+"月================");
// 调用父类属性进行赋值
employee.setPay(9800.0);
// 银行卡余额等于工资加原来卡的余额
employee.setBankCard(employee.getBankCard() + employee.getPay());
// 输出
System.out.print(employee.getName() + "的薪资为:" + employee.getPay() + "\t");
System.out.println("卡余额是:" + employee.getBankCard());
clerk.setPay(5600.0);
// 银行卡余额等于工资加原来卡的余额
clerk.setBankCard(clerk.getBankCard() + clerk.getPay());
// 输出
System.out.print(clerk.getName() + "的薪资为:" + clerk.getPay()+ "\t");
System.out.println("卡余额是:" + clerk.getBankCard());
month++;
}
}
}
- 定义测试类,创建公司对象,经理对象,职员对象,调用公司salary方法,给经理和职员发工资。
public class Test {
public static void main(String[] args) {
//创建公司对象
Company company = new Company();
//创建经理对象
Manager manager = new Manager();
//创建职员对象
Clerk clerk = new Clerk();
//调用公司salary方法
company.salary();
}
}
我们来看看运行效果图吧
今日分享就到这儿了,欢迎各位业界大佬提出宝贵的意见!!