何が Java の 重写?🥒
- Java中的方法重写(Method Overriding)是指在子类中定义一个与父类中同名、同参数列表、同返回值类型的方法,从而覆盖父类中的方法实现。当子类对象调用该方法时,会优先调用子类中的方法实现,而不是父类中的方法实现。
- 需要注意的是,方法重写只能在继承关系中发生,即子类重写父类的方法。如果两个类之间没有继承关系,就不能进行方法重写。
- 方法重写的目的是为了实现多态性,让不同的子类对象调用同一个方法时,可以根据实际类型来执行不同的方法实现。
@Override 注解の作用 🍊
- @override注解是告诉编译器,下面的方法是重写父类的方法
- 如果不写@override注解去直接重写方法,编译器是不会判断你是不是正确重写了父类中的方法的。
- 如重写方法时参数与父类不同,程序是不会提示报错的。这会留下一个潜在的bug。
- 当你写了@override注解时,程序会判断你是否正确的重写了父类的对应方法。
- 而且加上此注解后,程序会自动屏蔽父类的方法。
方法重写的规则 🍋
- 方法名、参数列表和返回值类型必须与父类中被重写的方法相同。
- 访问修饰符不能比父类中被重写的方法的访问修饰符更严格。例如,如果父类中被重写的方法是public,那么子类中重写的方法也必须是public或者protected,不能是private。
- 子类中重写的方法不能抛出比父类中被重写的方法更多的异常,或者抛出未在父类中声明的异常。
- 子类中重写的方法不能使用比父类中被重写的方法更严格的访问修饰符。例如,如果父类中被重写的方法是protected,那么子类中重写的方法不能是private。
什么情况下会进行方法重写?🍓
方法重写通常发生在继承关系中,当子类需要对父类的某个方法进行特定的实现时,就可以通过方法重写来实现。
Java 重写的小案例 🍄
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public void introduce() { System.out.println("我叫" + name + ",今年" + age + "岁。"); } } public class Student extends Person { private String school; public Student(String name, int age, String school) { super(name, age); this.school = school; } @Override public void introduce() { System.out.println("我叫" + getName() + ",今年" + getAge() + "岁,就读于" + school + "。"); } public String getSchool() { return school; } public void setSchool(String school) { this.school = school; } }
在这个案例中,子类Student重写了父类Person的introduce()方法,并且添加了一个新的属性school。在子类中,我们可以通过super关键字来调用父类的构造方法和方法,也可以通过this关键字来调用子类自己的属性和方法。