一、OOP 三大特性
你是一个 Java 实习生,今天刚入职,Leader 让你写一个 Employee 类(有名字/工资/打卡)
public class Employee {
private Long id;
private String name;
private Integer age;
private Integer salary;
public Employee(Long id, String name, Integer age, Integer salary) {
this.id = id;
this.name = name;
this.age = age;
this.salary = salary;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getSalary() {
return salary;
}
public void setSalary(Integer salary) {
this.salary = salary;
}
}
Java 编程的世界观是什么?世界是由对象组成的,对象有数据(字段)和行为(方法),数据和行为打包在一起。
(一)封装
1.封装是什么
封装=【把对象内部状态藏起来(private 字段),对外只暴露有限且合法的访问通道(public 方法)】。外部代码想改工资、访问数据必须走 setter 方法。
2.为什么要写 8 个 setter/getter 不直接写public Integer salary;?
不封装反例
同事一行代码把张三工资改成 9 个 9,Employee zhangsan=new Employee(1001L,"张三",24,25000);zhangsan.salary=999999999;//直接改 public 字段。Leader 查账时,找不到是谁改的,什么时候改的,为什么改
(二)继承(经理是一个员工:is-a 关系)
1.继承是什么?
继承=子类 is a 父类:自动拥有父类所有非 private 的属性和方法,不用重复写 4 个相同字段 +8 个 getter/setter。
public class Manager extends Employee {
private String bonus;
public Manager(Long id, String name, Integer age, Integer salary, String bonus) {
super(id, name, age, salary);
this.bonus = bonus;
}
public String getBonus() {
return bonus;
}
public void setBonus(String bonus) {
this.bonus = bonus;
}
}
继承 2 大坑
单继承限制
组合优于继承
(三)多态(同一句调用,不同对象不同表现)
1.多态是什么?
多态=同一方法调用(calcYearSalary()),不同对象(普通员工 vs 经理),表现不同(12 个月 vs12+3 个月)。
