重载还是覆写?

重载和覆写是面向对象程序设计语言中两个基本的概念,然而这两个概念,初学者却往往混淆它们,昨天在论坛上看到有初学者把Override说成是重载,我觉得有必要再对这两个概念作一下解释。

1.重载(Overload):

类中定义的方法可能有不同的版本,它具有如下的特征:

I.           方法名必须相同

II.         参数列表必须不相同,与参数列表的顺序无关

III.       返回值类型可以不相同

示意代码:

public class MyClass

{

    
public void Write(string _str)

    


        
//

    }


    
public void Write(string _str, string _target)

    


        
//

    }


    
public bool Write(string _str, string _target, bool _flag)

    


        
//

    }


}


注意:参数列表必须不相同这一条由于泛型的出现,要特别小心。例如下面代码构成了重载,尽管它们的参数列表相同:

public class MyClass

{

    
public void Write<T>(string _str)

    


        
//

    }


    
public void Write(string _str)

    


        
//

    }


}


2.覆写(Override):

子类中为满足自己的需要来重复定义某个方法的不同实现,它具有如下特征:

I.           通过使用关键字Override来覆写

II.         只有虚方法和抽象方法才能够被覆写

III.       相同的方法名

IV.       相同的参数列表

V.         相同的返回值类型

示意代码:

public abstract class BaseClass

{

    
public abstract void Write(string _str);

}


 

public class SubClass : BaseClass

{

    
public override void Write(string _str)

    
{

        
//

    }


}
作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2006-03-09 08:53 TerryLee 阅读(1177) 评论(4)  编辑 收藏

  回复  引用    
#1楼 2006-03-09 12:32 | 千年老妖猴 [未注册用户]
建议把题目改为:“重载与覆写的异同”
  回复  引用  查看    
#2楼 2006-03-09 15:48 | 猪头      
“参数必须不同”是指参数的个数或者类型不相同,和参数顺序无关。
  回复  引用  查看    
#3楼 [楼主]2006-03-10 08:40 | Terrylee      
@猪头
嗯,这一点很重要,我应该补充上
  回复  引用    
#4楼 2007-04-21 14:27 | renqiuqiu [未注册用户]

public class chongzai {
String name;
int age;
double weight;
double height;
public void sss(String a,int b){
name = a;
age = b;
System.out.println("my name is"+name);
System.out.println("my age is"+age);
}
public void sss(double c){
weight = c;
System.out.println("my weight is"+weight);
}
public void sss(double d,String e,int f){
weight = d;
name = e;
int = f;
System.out.println("my weight is"+weight);
System.out.println("my name is"+name);
System.out.println("my height is"+height);
}
public static void main(String args[]){
chongzai p = new chongzai(String a ,int b );
chongzai p = new chongzai(double c);
chongzai p = new chongzai(double d,String e,int f);
p.sss("renqiu",21);
p.sss(171,21);
p.sss(60,"renqiu",171);

}
}


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-03-10 08:42 编辑过


相关链接: