重写和重载是两个意思吗?还是一个意思的不同种说法!!!

解决方案 »

  1.   

    java语言中的概念就是多,这回又有两个概念,重载和重写。这是两个新概念,也是两个令初学者容易混淆的概念。他们的概念截然不同,只不过都有个“重”字,就以为是很像的。下面解释一下这两个概念:    方法重载(overloading method) 是在一个类里面,方法名字相同,而参数不同。返回类型呢?可以相同也可以不同。    方法重写(overiding method) 子类不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。如果还是搞混的话,就把“重写覆盖”,这个词多念几遍吧。知道是覆盖的话,就知道是子类覆盖父类的方法了。实践: 重载的例子public class MethodOverloading { 
    void recieve(int i) { 
         System.out.println("接收一个int数据"); 
         System.out.println("i="+i); 
         } 
    void recieve(float f) { 
         System.out.println("接受一个float型的数据"); 
         System.out.println("f="+f); 
         } 
         void recieve(String s) { 
         System.out.println("接受一个String型数据"); 
         System.out.println("s="+s); 
         } public static void main(String[] args){    MethodOverloading m = new MethodOverloading();    m.recieve(3456);    m.recieve(34.56);m.recieve(“百家拳软件项目研究室“);}
    }大家看到了上面的例子方法receive()有三个,名字相同参数不同。这样的话,在main()调用的时候,参数用起来就很方便了。重写的例子似乎不用举了,记不住的话,就和“覆盖”。一起念。    有时候,重载和重写的方式有些复杂,在jdk5里面。有一些方式能简化一些。我们来看看吧,jdk5的可变参数。 如果把相同参数类型的方法重载好几遍真的是很烦。就一个方法,pri(String args), pri(String arg0 ,String arg1), pri(String arg0,String arg1,String arg2), pri(String arg0,String arg1,String arg2,String arg3)。这样的话会写很多烦琐的代码。现在jdk5可以,用“…”来代替这些参数。实践: public class overload { //若干个相同类型的参数,用“...”代替  public void pri(String... strings ){       for (String str : strings)   //for这个循环语句也有迭代的意思       System.out.print(str);    }   public static void main(String[] args){       new overload().pri("100jq"," 百家拳软件项目研究室"," www.100jq.com");   }} 上述例子打包下载jdk5的方法重写,比以前多了一个叫做协变返回的概念。在以往jdk的版本中,还有一个比较让人讨厌的地方。方法重写确实是比较不错的机制,如果想用父类的方法,写个super就可以了,如果不想用父类的方法就重写覆盖。但是重写覆盖的返回类型不能覆盖,父类的类型不够用怎么办,我们想在子类重写它的类型可以吗?现在可以了。看下面的例子:class Point2D { //定义二维的点 protected int x, y; public Point2D() {    this.x=0;    this.y=0;} public Point2D(int x, int y) {    this.x = x;    this.y = y; }}//定义三维的点,继承二维class Point3D extends Point2D { protected int z; public Point3D(int x, int y) {    this(x, y, 0); } public Point3D(int x, int y, int z) {    this.x = x;    this.y = y;    this.z = z; }}//定义二维的位置class Position2D { Point2D location; public Position2D() {    this.location = new Point2D(); } public Position2D(int x, int y) {    this.location = new Point2D(x, y); } public Point2D getLocation() {    return location; }}//定义三维的位置,继承二维的位置class Position3D extends Position2D { Point3D location; //在这里已经变成Point3D的类型了 public Position3D(int x, int y, int z) {    this.location = new Point3D(x, y, z); } @Override //注释是重写方法 public Point3D getLocation() {    return location; //返回是子类的类型而不是原来的类型了 }} 
      

  2.   

    Overloading : 重载
    Overriding  :重写1、Overloading 与 Overriding  是两个不同的概念
    Overloading 是指在同一个作用域中有两个或多个函数拥有相同的名字不同的签名。函数的签名包括:参数的数量和类型,const属性。当编译器发现存在一个以上的具有相同名字的函数,它就会调用其中一个匹配的函数。
    Overriding  是指子类有一个函数与父类中的某个虚函数的名字和签名都相同。当一个子类的对象调用该虚函数时,就会执行子类中Overriding 的那个函数。所以Overriding  改变的是类的行为而不是类的借口。2、eg
    class B {
      public:
        //...
        virtual int f( int );                                               
        void f( B * );                                                      
        //...
    };class D : public B {
      public:
        int f( int ); //Overriding B::f(int) (虚函数的问题)
        int f( B * ); //overload   D::f(int),而不是B::f(B *) (作用域的问题)
    };
      

  3.   

    不是一个意思!!!方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写   (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
      

  4.   

    一般情况下,“重载”是从“overload”一词的中文译法,“重写”是“override”一词的中文译法。
    如果翻译的人头昏了则另当别论。
      

  5.   

    不是一回事
    方法重载(overloading method) 是在一个类里面,方法名字相同,其他的都不可以相同,像参数列表\返回值\参数顺序等.
    他实现了类中多态性 
    方法重写(overiding method) 子类不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖.他实现了子父类之间的多态性
      

  6.   

    overload
    override简单来说就是签名相同与不同。
      

  7.   

    重写是子类覆盖了父类的方法。他们的方法是相同的。
    class Father
    {
      void f(){System.out.println("father");}
    }
    class Son extends Father
    {
      void f()(System.out.println("son"));
    }
    这样子类Son覆盖了父类的方法f();说明一下。构造方法也能重写
    而重载是方法的名字一样,但是参数的个数和类型不一样
    class Test
    {
      void f(){System.out.println("f1");}
      void f(String s){System.out.println(s);}}