方法的重写、覆盖
在子类中可以根据需要对从父类中继承来的方法进行改造—覆盖方法(方法的重置、重写),在程序执行时,子类的方法将覆盖父类的方法。
覆盖方法必须和被覆盖方法具有相同的方法名称、参数列表和返回值类型。
覆盖方法不能使用比被覆盖方法更严格的访问权限。
覆盖方法举例(1)
public class Person { public String name; public int age; public String getInfo() { return "Name: "+ name + "\n" +"age: "+ age; } } public class Student extends Person { public String school; public String getInfo() { //覆盖方法 return "Name: "+ name + "\nage: "+ age + "\nschool: "+ school; } public static void main(String args[]) { Student s1=new Student(); s1.name="Bob"; s1.age=20; s1.school="school2"; System.out.println(s1.getInfo()); //Name:Bob age:20 school:school2 } }
Person p1=new Person(); p1.getInfo(); //调用Person类的getInfo()方法 Student s1=new Student(); s1.getInfo(); //调用Student类的getInfo()方法 这是一种“多态性”:同名的方法,用不同的对象来区分调用的是哪一个方法。
覆盖方法举例(2)
class Parent { public void method1() {} }
class Child extends Parent { private void method1() {} //非法,子类中的method1()的访问权限private比被覆盖方法的访问权限public弱 }
public class UseBoth { public void doOtherThing() { Parent p1 = new Parent(); Child p2 = new Child(); p1.method1(); p2.method1(); } }