- 子类可以增加字段、增加方法或覆盖父类方法,但继承不会删除任何字段和方法
- 不恰当认为super 同 this 引用是类似的概念,其实super不是一个对象的引用,不能将值super赋给另一个对象变量,super只是一个指示 编译器调用父类方法的特殊关键字
- this关键字,一指示隐式参数的引用,二是调用该类的其他构造器;super关键字,一是调用超类方法,二是调用超类的构造器。调用构造器语句只能作为另一个构造器的第一条语句出现。构造器参数可以传递给当前类(this)的另一个构造器,也可以传递给超类(super)的构造器。
- 继承不仅局限于一个层次,它可以是多层次的,树状结构。
- 有时候不希望定义某个类的子类,可以使用final修饰类,那就表明了这个类是final类,不能够被继承,这个类中的所有方法都自动变成final方法,不过不包括字段。如果使用final修饰方法,那么就是final方法,所有继承这个类的子类都不能覆盖这个方法。final也可以用来修饰字段,在构造对象之后,字段就不允许改变了。
- object是所有类的始祖,但不需要显式写出。
父类
package father_class;
import java.time.LocalDate;
public class father_employee {
private String name = "";
private double salary = 0;
private LocalDate hireDay ;
public father_employee(String name, Integer salary, int year, int month, int day){
this.name = name;
this.salary = salary;
hireDay = LocalDate.of(year,month,day);
}
public father_employee(){
}
// 调整工资
public void modifySalary(double rate){
salary = salary * rate;
}
public double printSalary(){
return salary;
}
public String getName(){
return name;
}
public void setName(String name ){
this.name = name;
}
public double getSalary(){
return salary;
}
public void setSalary(Integer salary){
this.salary = salary;
}
public LocalDate getHireDay() {
return hireDay;
}
public void setHireDay(LocalDate hireDay) {
this.hireDay = hireDay;
}
}
子类
package father_class;
public class son_manager extends father_employee {
private Integer bonus = 0;
/**
*
* @param name
* @param salary
* @param year
* @param month
* @param day
*/
// 构造方法
public son_manager(String name,Integer salary,int year,int month,int day,int bonus){
super(name,salary,year,month,day);
this.bonus = bonus;
}
public double getSalary(){
return super.getSalary()+bonus;
}
public void setBonus(Integer bonus){
this.bonus = bonus;
}
public Integer getBonus(){
return bonus;
}
}
测试类
package father_class;
public class test {
public static void main(String[] args) {
// 有奖金的老板
var boss = new son_manager("Boss", 100000, 2018, 12, 12, 3485);
// 三个员工
var staff = new father_employee[3];
staff[0] = boss;
// 创建两个员工
staff[1] = new father_employee("one", 9000, 1982, 12, 3);
staff[2] = new son_manager("Manager", 10000, 2019, 1, 1, 999);
// 打印
for (father_employee e : staff) {
System.out.println("name=" + e.getName() + ",salary=" + e.getSalary());
}
father_employee father_1 = new father_employee();
father_1.setName("IKUN");
father_1.setSalary(1982);
father_1.modifySalary(2.5);
System.out.println("name=" + father_1.getName() + ",salary=" + father_1.getSalary());
}
}
运行截图