Java中的重载和重写

Java中多态可以体现在方法的重载以及重写中:

public class Test {
	public static void main(String[] args) {
		A a = new B();
		test(a);
	}
	
	public static void test(A a){
		System.out.println("test A");
		a.whoAmI();
	}
	
	public static void test(B b){
		System.out.println("test B");
		b.whoAmI();
	}
}
class A{
	public void whoAmI(){
		System.out.println("I am A");
	}
}
class B extends A{
	public void whoAmI(){
		System.out.println("I am B");
	}
}

以上代码输出结果为:

方法的重载可以让类以统一的方式来处理不同类型的数据,多个同名函数同时存在但是具有不同的参数个数及其类型。

Java中的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。

调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法,这里体现的静态多态性,在编译时确定参数类型。

方法的重写即父类和子类间的多态性,在父类的方法不满足子类时,子类可对其进行重写,这里体现的动态多态性,重写方法只能存在于具有继承关系中,重写方法只能重写父类非私有的方法。被重写的方法在运行时才会确定数据类型。

重写方法的规则

1、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。

2、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。

3、访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)

4、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。例如:

父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。

而重载的规则:

1、必须具有不同的参数列表;

2、可以有不责骂的返回类型,只要参数列表不同就可以了;

3、可以有不同的访问修饰符;

4、可以抛出不同的异常;

重写与重载的区别在于:

重写多态性起作用,对调用被重载过的方法可以大大减少代码的输入量,同一个方法名只要往里面传递不同的参数就可以拥有不同的功能或返回值。

用好重写和重载可以设计一个结构清晰而简洁的类,可以说重写和重载在编写代码过程中的作用非同一般.

参考:http://www.cnblogs.com/bluestorm/archive/2012/03/01/2376236.html

猜你喜欢

转载自blog.csdn.net/BingoXing/article/details/83313628