成员函数:
当子类和基类中的函数一模一样时,会运行子类的函数。
重载和覆盖:
重载:发生在同一个类中(overload)
覆盖:发生在父子类中,覆盖也叫覆写,覆写的含义就是:方法名、参数个数、返回值类型、参数类型完全一模一样的两个方法。
覆盖的注意事项:一个程序中,子类如果想覆盖父类,那么必须保证子类的权限大于父类的权限。静态只能覆盖静态,或者被静态覆盖。
什么时候用覆盖?
当一个类要进行子类扩展时,子类需要保留父类所具有的声明,但是还要定义子类特有的内容时,这个时候就需要用到覆盖。
案例:
class Father{
Father(){
System.out.println("Fu run");
}
}
class Son extends Father{
Son(){
System.out.println("Zi run");
}
}
public class ExtendsDemo2 {
public static void main(String[] args) {
new Son();
}
}
运行结果:
Fu run
Zi run
我们可以发现,当子类构造对象时,访问子类的构造函数时,父类的构造函数也运行了。这是因为在子类的构造函数中第一行有一个默认的隐式语句super()。在子类实例化的过程中,子类中所有的函数都会默认访问父类中的空参数构造函数。
注意:super()语句必须定义在子类构造函数的第一行,因为父类的初始化动作要先完成。