覆盖是指父子类之间的关系,当子类继承父类中所有可能被子类访问的成员方法时,如果子类的方法名与父类的方法名相同,那么子类就不能继承父类的方法,此时称为子类的方法覆盖了父类的方法。覆盖体现了子类补充或者改变父类方法的能力,通过覆盖,可以使一个方法在不同的子类中表现出不同的行为。
下面通过一个具体的实例介绍如何实现方法的覆盖。
本实例主要实现定义一个动物类Animal及它的子类Bird,具体步骤如下:
(1)创建一个名称为Animal的类,在该类中声明一个成员方法cry(),具体代码如下:

public class Animal{
	public Animal(){}
	public void cry(){
		System.out.println("动物发出叫声!");
	} 
}



(2)创建一个Animal类的子类Dog类,在该类中覆盖了父类的成员方法cry(),具体代码如下:


public class Dog extends Animal{
	public Dog(){}
	public void cry(){
		System.out.println("狗发出汪汪的叫声!");
	}
}



(3)创建一个Animal类的子类Cat类,在该类中覆盖了父类的成员方法cry(),具体代码如下:


public class Cat extends Animal{
	public Cat(){}
	public void cry(){
		System.out.println("猫发出喵喵的叫音!");
	}
}



(4)创建一个Animal类的子类Cattle类,在该类中不定义任何方法,具体代码如下:


public class Cattle extends Animal{}



(5)创建一个名称为Zoo的类,在该类的main() 方法中创建子类Bird的对象并为该对象分配内存,然后对象调用该类的成员方法,具体代码如下:


public class Zoo{
	public static void main(String args[]){
		Dog dog = new Dog();
		System.out.println("执行dog.cry();语句时的输出结果:");
		dog.cry();
		Cat cat = new Cat();
		System.out.println("执行cat.cry();语句时的输出结果:");
		cat.cry();
		Cattle cattle = new Cattle();
		System.out.println("执行cattle.cry();语句时的输出结果:");
		cattle.cry();
	}
}



(6)运行本实例的结果如下:


[color=blue]执行dog.cry();语句时的输出结果:


狗发出汪汪的叫声!


执行cat.cry();语句时的输出结果:


猫发出喵喵的叫音!


执行cattle.cry();语句时的输出结果:


动物发出叫声![/color]


从上面的运行结果中可以看出,由于Dog类和Cat类都重载了父类的方法cry(),因此执行的是子类中的cry()方法,因为Cattle类没有重载父类的方法,所以执行的是父类中的cry()方法。



注意:


在进行方法覆盖时,需要注意一下内容:


●子类不能覆盖父类中声明为final或者static的方法。


●子类必须覆盖父类中声明为abstract的方法,或者子类也应该声明为abstract。


●子类覆盖父类中的同名方法时,子类的方法声明也必须和父类中被覆盖的方法声明一样。