黑马程序员技术交流社区

标题: 方法重写和方法重载 [打印本页]

作者: 宋健    时间: 2013-3-12 20:05
标题: 方法重写和方法重载
方法重载和方法重写有什么区别?
具体在什么时候使用?
作者: 于腾飛    时间: 2013-3-12 20:12
重写一般是指父类和子类之间,子类重写了父类的一个方法,当然方法名是一样的,而且不能改变父类方法的返回值,比如说父类是返回String,子类重写了这个方法,想返回一个int,那是不行的,也得返回String。
如 public class TestClass1{
    public int test(int i){return 1;}
}

public class TestClass2 extends TestClass1{
     public int test(int i){return 2;}
}

重载是一个类里面,写了多了同名的方法,各个方法的返回值类型可以不一样。要注意区分重载方法可以通过参数列表的个数,类型和顺序。但是不推荐用顺序来进行重载,这会让代码可读性极差。
如 public class TestClass{
    public int test(int i){return 1;}
    public int test(float f){return 1;}
}

作者: 徐鸿燕    时间: 2013-3-12 20:23
重载:只看函数的参数列表。
         简单的说,一个类中的方法与另一个方法同名,但是参数表不同,这种方法称之为重载方法。
         重载的方法只属于子类。
当需要对同一个方法进行不同的操作时(传递不同的参数)就用重载。

覆盖(重写):子父类的方法要一模一样。
当需要对父类中的某个方法改变的时候就用覆盖。
作者: 张怀晶    时间: 2013-3-12 21:27
重写:
    子类可继承父类的方法,而不需要重写相同的方法,但有时子类并不想原封不动地继承父类的方法,而是想做一定的修改,这就需要采用方法的重写,又称为方法的覆盖。 重写时需将父类的方法设为虚方法,重写的方法需添加override关键字。
   
public class Person
    {
        public Person(string name)
        {
            this.Name = name;
        }
        public virtual void Show()
        {
            Console.WriteLine("父类中的show方法");
        }
    }

    public class Chinese : Person
    {
        public Chinese(string name)
            : base(name)
        {
            
        }
        public override void Show()
        {
            Console.WriteLine("我叫:{0},我是中国人!",Name);
        }
    }



重载:
    方法重载是让类以统一的方式来处理不同的参数类型或不同个数的参数的一种方法。方法重载就是类中可以创建多个方法,它们有相同的名字,但有不同的参数类型和参数个数,调用时通过参数类型参数个数的不同来决定具体调用哪个方法。
    class Person
{
      void name(string a)
      {
            Console.WriteLine("string a!");
      }

       void name(int a)
      {
            Console.WriteLine("int a!");
      }

      void name(string a,int i)
      {
            Console.WriteLine("string a,int i!");
      }

}
作者: 黑马-蒋振军    时间: 2013-3-13 13:14
重载:同名函数存在于同一个类中,条件是参数列表必须不同
重写:一般是子类重写父类方法,返回值函数名和参数列表必须相同,一般用于对父类方法进行修改性改进以满足需求




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2