java 重写与重载

重写的主要优点是能够定义子类特有的特征: 如: 
public class Father{ 
	public void speak(){ 
		System.out.println("Father"); 
	} 
} 
public class Son extends Father{ 
	public void speak(){ 
		System.out.println("son"); 
	} 
}
 这也叫做多态性,重写方法只能存在于具有继承关系的类中,重写方法只能重写父类非私有的方法,当上例中Father类的speak()方法
为private时,Son类不能重写speak()方法,此时在Son类中定义的speak()方法相当于一个新的方法,与Father中的speak()方法
没有任何关系. 当Father类的speak()方法声明为final时,无论该方法的修饰符是public,protected还是默认,
Son类根本不能重写speak()方法,试图编译代码时,编译器会报错.例: 
public class Father{ 
	final void speak(){ 
		System.out.println("Father"); 
	} 
} 
public class Son extends Father{ 
	public void speak(){
		System.out.println("son"); 
	} 
}//编译器错误信息:Son 中的 speak() 无法覆盖 Father 中的 speak();被覆盖的方法为 final 重写方法的规则: 
1.参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载; 
2.返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载; 
3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private); 
4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常.
例如: 父类的一个方法申明了一个检查异常IOException,在重写这个方法时就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常(unchecked exception,如运行时异常). 
重载方法的规则: 1.必须具有不同的参数列表; 2.可以有不同的返回类型,只要参数列表不同就可以了; 3.可以有不同的访问修饰符; 4.可以抛出不同的异常; 
示例: public class Father{ 
	public void speak(){ 
		System.out.println("Father"); 
	} 
	public void speak(String info){ 
		System.out.println("Father speak:" + info); 
	} 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值