方法的重写
在子类中定义一个和父类一样的方法,叫作子类覆写(重写)了父类的方法。
public class Hi{
public static void main(String[] args) {
B b = new B();
b.getinfo();
}
}
class A{
public void getinfo(){
System.out.println("This is a father method");
}
}
class B extends A{
public void getinfo(){
System.out.println("This is a son method");
}
}
//输出:This is a son method
事实上调用的是子类的方法,也就是子类中的方法覆盖了父类的方法。先在子类中查找调用的方法,如果有则直接调用,如果没有就往父类中查找,如果还没有就继续往父类的父类中查找,如果最终都没有找到,则编译不通过。
覆写的要求
- 要求子类的方法名称和父类的一致,而且参数列表要一致
public class Hi{
public static void main(String[] args) {
B b = new B();
b.getinfo();
}
}
class A{
public void getinfo(){
System.out.println("This is a father method");
}
}
class B extends A{
public void getinfo(int a){
System.out.println("This is a son method");
}
}
//输出:This is a father method 只有父类中有无参函数
- 子类中重写的方法的访问权限不能比父类的小。也就是说子类重写的方法不能拥有比父类更为严格的访问权限(正常开发访问权限都是一样的)。
- 如果父类和子类覆写的方法的访问权限一样则返回值必须一致,如果访问权限不一样则返回值可以不一样(正常开发中返回值和访问权限都是一致的)
重写和重载的区别
- 重载:1、发生在一个类中2、对返回值没有要求(正常都会保持一致)3、对访问权限没有要求(正常都会保持一致)4、表示重载(overloading)
- 重写:1、发生在集成关系中(子类和父类)2、子类不能拥有比父类更小的访问权限3、如果子类和父类访问权限一致则返回值必须相同,否则可以不同3、表示重写(override)