在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称、返回值类型、参数列表。
如果在新类中定义一个方法,其名称、返回值类型和参数列表正好与父类中的相同,那么,新方法被称做覆盖旧方法。
参数列表又叫参数签名,包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同。
被覆盖的方法在子类中只能通过super调用。
注意:覆盖不会删除父类中的方法,而是对子类的实例隐藏,暂时不使用。
请看下面的例子:
1 public class Demo{ 2 public static void main(String[] args) { 3 Dog myDog = new Dog("花花"); 4 myDog.say(); // 子类的实例调用子类中的方法 5 6 Animal myAnmial = new Animal("贝贝"); 7 myAnmial.say(); // 父类的实例调用父类中的方法 8 } 9 } 10 class Animal{ 11 String name; 12 public Animal(String name){ 13 this.name = name; 14 } 15 16 public void say(){ 17 System.out.println("我是一只小动物,我的名字叫" + name + ",我会发出叫声"); 18 } 19 } 20 class Dog extends Animal{ 21 // 构造方法不能被继承,通过super()调用 22 public Dog(String name){ 23 super(name); 24 } 25 // 覆盖say() 方法 26 public void say(){ 27 System.out.println("我是一只小狗,我的名字叫" + name + ",我会发出汪汪的叫声"); 28 } 29 }
运行结果:
我是一只小狗,我的名字叫花花,我会发出汪汪的叫声
我是一只小动物,我的名字叫贝贝,我会发出叫声
方法覆盖的原则:
方法的重载:
前面已经对Java方法重载进行了说明,这里再强调一下,Java父类和子类中的方法都会参与重载,例如,父类中有一个方法是 func(){ ... },子类中有一个方法是 func(int i){ ... },就构成了方法的重载。
覆盖和重载的不同:
系列文章:
Java知多少(16)StringBuffer与StringBuider
原文:http://www.cnblogs.com/Coda/p/4403800.html