您的位置:首页 > 编程语言 > Java开发

Java中方法的重载与重写的区别

2015-04-19 11:35 686 查看
重载(overloading)

遵循“两同一不同”规则

1)、同一个类中可以有多个名称相同的方法(“两同”),但这些方法的参数列表各不相同((“一不同”)即参数个数或类型不同)。

2)、返回值类型、修饰符可以相同也可以不同,但Java里不能使用方法的返回值类型、修饰符作为区分方法重载的依据。

3)、构造方法可以重载不可以重写。构造方法重载可以用来满足在调用方法时候(实例化对象时)不同的返回值和参数的要求。

4)、重载是一个类中多态性的一种表现。

5)、同一个类中。

例:

public class OverLoad{
private String name;
private int sex;
//无参构造方法
public OverLoad(){
super();
}
//构造方法的重载
public OverLoad(String name,int sex){
super();
this.name=name;
this.sex=sex;
}
//输出构造方法中的参数值
public void print(){
System.out.println("name="+name+" sex="+sex);
}
public void test(){
System.out.println("无参数的方法!");
}
//重载test方法
public void test(String m){
System.out.println("重载test的方法:" + m);
}
public static void main(String[] args){
OverLoad ol=new OverLoad("张三",20);
ol.print();
//一个类中多态性的一种表现
//调用上面没有参数的test方法
ol.test();
//调用上面有一个字符串参数的test方法
ol.test("Hello");
}
}


重写(overriding 又称覆盖)

遵循“ 两同两小一大”规则

1)、子类中的方法可以与父类中的某个方法的名称和参数完全相同(“两同”),通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了(如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类),这也是面向对象编程的父类与子类之间多态性的一种表现。

2)、子类方法返回值类型应比父类方法返回值类型更小或相等,子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子义常,因为子类可以解决父类的一些问题,不能比父类有更多的问题(“两小”)。

3)、子类方法的访问权限只能比父类的更大,不能更小(“一大”)。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。

4)、类与类之间。

例:

public class Car{
//定义Car类的run方法
public void run(){
System.out.println("我的奔驰正在跑...");
}
}
//再定义一个Test类,这个类扩展了Car类,重写了Car类的run方法。
public class Test extends Car{
//重写Car类的run方法
public void run(){
System.out.println("我的法拉利正在跑...");
//调用父类的run方法
//super.run()
}
public static void main(String[] args){
//创建Test对象
Test t=new Test();
t.run();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: