24. java面向对象 - 方法重写
一、方法的重写
1. 定义
在子类中可以根据需要对从父类中继承来的方法进行改造,也称为方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。
2. 要求
(1) 子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表
(2) 子类重写的方法的返回值类型不能大于父类被重写的方法返回值类型
(3) 子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限
- 子类不能重写父类中声明为private权限的方法
(4) 子类方法抛出的异常不能大于父类被重写方法的异常
3. 注意
子类与父类中同名同参的方法必须同时声明为非static的,或者同时声明为static(不是重写)。因为static方法是属于类的,子类无法覆盖子类的方法。
二、super关键字
1.super关键字使用
(1)super理解为父类的
(2)super可以用来调用:属性、方法、构造器
2.super使用
(1)在子类的方法或构造器中,通过"super.属性"或"super.方法"的方式,显示的调用父类中声明的属性或方法。但通常情况下省略super
(2)特殊情况,当子类和父类中定义了同名属性,子类要调用父类的属性,则必须使用super.属性
(3)特殊情况,重写方法,要调用父类中定义的方法,使用super.方法()
(4)super在构造器中使用:super(形参列表);调用父类中指定的构造器
(5)在构造器首行,没有显示的声明this(形参列表)或super(形参列表);默认调用父类中空参构造器super()
1. super调用父类构造器
public class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void eat() {
System.out.println("父-吃饭");
}
public void sleep() {
System.out.println("父-睡觉");
}
}
public class Student extends Person {
private String major;
public Student(String name, int age, String major) {
//super调用父类构造器
super(name, age);
this.major = major;
}
public void show(){
System.out.println(name + age + major);
}
}
class StudentTest {
public static void main(String[] args) {
Student stu = new Student("tom", 20, "IT");
stu.show();
}
}