package com.atguigu.test02;
/*
* 方法的重写:Override
* 当子类继承了父类的方法时,但是父类的方法体不适用于子类了,那么子类可以选择进行“重写overwrite”。
*
* 方法 = 方法签名/方法头 + 方法体
*
* 重写有要求:
* (1)方法名:必须和父类被重写的方法名“相同”
* (2)形参列表:必须和父类被重写的形参列表“相同”
* (3)返回值类型:
* 基本数据类型和void:要求与父类被重写的方法的返回值类型“相同”
* 引用数据类型:要求子类重写的方法的返回值类型 <= 父类被重写的方法的返回值类型
* 例如:
* 子类方法的返回值类型是Student,父类被重写方法的返回值类型是Student
* 子类方法的返回值类型是Student,父类被重写方法的返回值类型是Person
* 子类方法的返回值类型是Person,父类被重写方法的返回值类型是Student(错误的)
* (4)修饰符
* ①权限修饰符:子类重写的方法的权限修饰符的可见性范围 >= 父类被重写方法的权限修饰符的可见性范围
* 例如:
* 子类方法的权限修饰符是public,父类被重写方法的权限修饰符public
* 子类方法的权限修饰符是public,父类被重写方法的权限修饰符protected
* ②其他修饰符(后面讲)
*/
public class TestOverride {
public static void main(String[] args) {
Manager m = new Manager("崔志恒", 20000,1000);
System.out.println(m.getInfo());
}
}
//员工
class Employee{
//属性列表
private String name;
private double salary;
//构造器列表
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
public Employee() {
}
//get/set
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String getInfo(){
return "姓名:" + name + ",薪资:" + salary;
}
}
//经理
class Manager extends Employee{
//子类的属性列表
private double bonus;//奖金
//子类的构造器列表
public Manager(String name, double salary, double bonus) {
super(name, salary);
this.bonus = bonus;
}
public Manager() {
}
//子类的get/set
public double getBonus() {
return bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
//重写父类的getInfo()
public String getInfo(){
//父类的name和salary的属性是私有的,不能在子类中直接使用
//return "姓名:" + name + ",薪资:"+salary + ",奖金" + bonus;
return "姓名:" + getName() + ",薪资:"+ getSalary() + ",奖金" + bonus;
}
}