1.初步了解Java父子类继承
在我们学习Java的时候,我们知道,我们可以把有相同属性和行为的对象归为一个类,而在这个类中,我们还可以继续细分对象的属性和行为,又可以细分成不同的类,而这个类不仅继承了上一个类的属性和行为,还拥有自己独特的属性和行为。如果我们一直细分下去,便可以非常细致地构造出一个对象,不过今天我就简单地讲一下我今天学习这个的心得。
我以员工的工资为例,员工(Employee)为一个类,每一个员工都有工资,所以我们先建一个员工类。
class Employee {
public int salary;
public int getSalary() {
return salary;
}
}
其中salary为员工的工资,通过 getSalary() 的方法来获取员工的工资。
2.子类创建
接下来我们可以把员工又分为不同的类,如 经理(Manager)、销售(Salesman)、工人(Worker), 不同的员工,他们的工资不一样。
经理(Manager):工资为固定工资;
销售(Salesman):工资分为固定工资,和销售业绩提成( 每月销售量 * 500 );
工人(Worker):以天结算工资。
所以我们又可以在 员工类(Employee) 的基础上创建子类:经理(Manager)、销售(Salesman)、工人(Worker)。
经理类(Manager):
class Manager extends Employee {
private final int salary;
public Manager( int ManagerSalary) {
this.salary = ManagerSalary;
}
public int getSalary() {
return salary;
}
}
销售类(Salesman):
class Salesman extends Employee {
private final int salesVolume;
public Salesman( int salesmanSalary, int salesVolume) {
this.salary = salesmanSalary;
this.salesVolume = salesVolume;
}
@Override
public int getSalary() {
return (salary + salesVolume * 500);
}
}
工人(Worker):
class Worker extends Employee {
private final int dailyWage;
private final int days;
public Worker( int dailyWage, int days) {
this.days = days;
this.dailyWage = dailyWage;
}
public int getSalary() {
return dailyWage * days;
}
}
注意: 关键字extends 是用于创建类之间的继承关系的,一个类继承另一个类时,会继承父类的属性和方法
我们可以看到每一个子类中都有父类的 getSalary() 方法和 属性 salary,在子类中我们通过重写或改变 getSalary() 方法来返回不同员工的工资。这样我们可以清晰的看到,每个员工都有工资,但是他们的工资又由不同的 成分 (属性) 构成.
3.代码合并
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int managerSalary = scan.nextInt();
int salesmanSalary = scan.nextInt();
int salesVolume = scan.nextInt();
int dailyWage = scan.nextInt();
int workerDays = scan.nextInt();
Employee e1 = new Manager(managerSalary);
Employee e2 = new Salesman(salesmanSalary, salesVolume);
Employee e3 = new Worker(dailyWage, workerDays);
System.out.println(e1.getSalary());
System.out.println(e2.getSalary());
System.out.println(e3.getSalary());
scan.close();
}
}
class Employee {
public int salary;
public int getSalary() {
return salary;
}
}
class Manager extends Employee {
private final int salary;
public Manager( int ManagerSalary) {
this.salary = ManagerSalary;
}
public int getSalary() {
return salary;
}
}
class Worker extends Employee {
private final int dailyWage;
private final int days;
public Worker( int dailyWage, int days) {
this.days = days;
this.dailyWage = dailyWage;
}
public int getSalary() {
return dailyWage * days;
}
}
class Salesman extends Employee {
private final int salesVolume;
public Salesman( int salesmanSalary, int salesVolume) {
this.salary = salesmanSalary;
this.salesVolume = salesVolume;
}
public int getSalary() {
return (salary + salesVolume * 500);
}
}