子类扩展了父类,子类是一个特殊的父类。大部分时候,子类总是以父类为基础,额外增加新的成员变量和方法。但有一种情况例外:子类需要重写父类的方法。但是鸟类都包含了飞翔方法,其中鸵鸟是一种特殊的鸟类,因为鸵鸟应该是鸟的子类,因为它也将从鸟类获得飞翔方法,但是这个飞翔方法明显不适合鸵鸟,为此,鸵鸟需要重写鸟类的方法。
     下面程序定义了一个Bird类。

public class Bird{
    //Bird类的fly()方法
    public void fly(){
        System.out.println( "我在天空里自由自在地飞翔。。。" );
    }
    
}
//下面再定义一个Ostrich类,这个类扩展了Bird类,重写了Bird类的fly()方法.

public class Ostrich extends Bird{
    //重写Bird类的fly()方法
    public void fly(){
        System.out.println( "我只能在地上奔跑..." );
    }
    public static void main(String[] args){
        //创建Ostrich对象
        Ostrich os = new Ostrich();
        //执行Ostrich对象的fly()方法,将输出"我只能在地上奔跑..."
        os.fly();
    }
}

    执行上面程序,将看到执行os.fly()是执行的不再是Bird类的fly()方法,而是执行Ostrich类的fly()方法.
    这种子类包含与父类同名方法的现象被称为方法重写、(Override),也被称为方法覆盖。可以说子类重写了父类的方法,也可以说子类覆盖了父类的方法。
    方法的重写要遵循“两同两小一大”规则,“两同”即方法名相同、形参列表相同;"两小"指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;"一大"指的是子类方法的访问权限应比父类方法的访问权限更大或相等.尤其需要指出的是,覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个类方法,一个是实例方法.