1. 重写(Override)

重写,即重新写一遍。即在子类中把父类本身具有的方法重新写一次。子类继承 了父类原有的非私有方法,但并不想完全遵循父类方法的功能。所以在方法名、参数列表、返回类型都相同的情况下,对父类方法修改或重写,即我们所说的重写(Override)。但要注意重写的规则:

  • 发生在之类与父类之间
  • 父类中的私有方法不能被重写
  • 重写父类方法时,访问权限不能比父类低,抛出异常不能比父类的异常范围广或抛出新的异常
  • 父类有静态方法时,子类必须通过静态方法进行重写(严格意义上并非重写)

总结: 子类进行方法重写时,最好与声明一致。

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Dog dog = new Dog();
		dog.eat();
	}

}

class Animal {
	public void eat() {
		System.out.println("动物在吃东西");
	}
}

class Dog extends Animal {

	@Override
	public void eat() {
		System.out.println("Dog在吃东西");
	}
}

2.重载(Overload)

同一个类中,同名的方法有不同的参数列表(参数类型不同,参数个数不同,甚至是参数顺序不同)即为重载,重载对返回类型无要求,可以相同,也可以不同,但不能通过返回类型是否相同来判断重载.

总结:

  • 重载(Overload)是一个类中多态性的一种表现
  • 重载要求同名方法参数列表不同(参数类型,个数甚至是参数顺序)
  • 重载时,返回值类型可以不同,也可以相同.不能以返回值类型作为是否重载的标准
public class Test01 {

	public static void main(String[] args) {
		Test01 test = new Test01();
		test.eat();
		test.eat("FEEL");
	}

	public void eat() {
		System.out.println("谁在吃东西");
	}

	public void eat(String name) {
		System.out.println(name + " 在吃东西");
	}
}

3.重写和重载的区别

  • Override是重写,Overload是重载,两者都是实现多态的方式,区别在于重载是编译时的多态,而重写是运行时的多态.
  • Overload前提是在同一个类中,只要函数名相同,参数列表不同,即构成重载,与返回值无关
  • Override出现在子类和父类中,子类必须和父类声明同样的方法和返回值类型.而且不能比父类被重写方法声明更多异常和拥有更大访问权限.
  • 重载对返回类型无要求,不能根据返回类型进行重载识别.