可以从图中看出,使用继承后可以省略许多不必要的操作。 继承格式:
public class Employee{
public void method(){
System.out.println("员工");
}
}
public class Teacher extends Employee{
}
public class test {
public static void main(String[] args) {
var teacher = new Teacher();
teacher.method(); //输出结果:员工
}
}
可以看出,Teacher类中没有method方法,但仍然输出,这就是继承的结果。
重名情况: 局部变量: 直接写成员变量名 本类的成员变量: this.成员变量名 父类的成员变量: super.成员变量名
public class Employee{
int number = 10;
}
public class Teacher extends Employee{
int number = 20;
public void method(){
int number = 30;
System.out.println(number); //30,局部变量
System.out.println(this.number); //20,成员变量
System.out.println(super.number); //10,父类的成员变量 (super也可以访问父类的成员方法)
}
}
继承关系中构造方法特点:
-
子类构造方法中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行子类构造
public class Employee{ public Employee(){ System.out.println("员工"); } }
public class Teacher extends Employee{ public Teacher(){ System.out.println("教师"); } }
public class test { public static void main(String[] args) { var teacher = new Teacher(); } } //输出教师 员工
-
子类构造可以通过super关键字调用父类重载构造
public class Employee { public Employee(int num){ System.out.println(num); } }
public class Teacher extends Employee { public Teacher(){ super(29); System.out.println("教师"); } }
public class test { public static void main(String[] args) { var teacher = new Teacher(); } } //输出29 教师
-
super的父类构造方法调用,必须是子类构造方法的第一个语句,且不能一个子类构造调用多次父类构造
public class Teacher extends Employee { public Teacher(){ super(); //将报错 super(29); System.out.println("教师"); } }
继承特性:
1. Java语言不支持多重继承,也就是说,子类至多只能有一个父类,但是可以通过实现多个接口达到多重继承的目的。
2. 子类只能继承父类的非私有(public与protected)成员变量与方法。
3. 当子类中定义的成员变量和父类中定义的成员变量同名时,子类中的成员变量会覆盖父类的成员变量,而不会继承。
4. 当子类中的方法与父类中的方法有相同的函数签名(相同的方法名,相同的参数个数与类型)时,子类将会覆盖父类的方法,而不会继承。