哪位大大能详细解释下这3个概念的特点和不同之处啊,看到继承这块,真是被这3个概念完全搞晕了,弄不清楚什么时候该重写方法,什么时候该重载

解决方案 »

  1.   

    重写是出现在有继承关系的两个类中,方法名,参数列表是一样的。
    如:
    class a{
    public void a1()
    {}
    }
    class b extends a{
    public void a1()
    {}
    }
    两个类中都有a1方法。重载是出现在一个类的内部,方法名是一样的,但参数列表不一样。
    如:
    class a{
    public void a1(int a)
    {}
    public void a1(int a,int b )
    {}
    public void a1(String a)
    {}
    }
      

  2.   

    方法重载(overloading method) 
           方法重载是让类以统一的方式处理不同类型数据的一种手段。Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法, 这就是多态性。下面是一个方法重载的例子: 
    class  MethodOverloading { 
         viod receive(int i) { 
    System.out.println("Received one int data"); 
    System.out.println("i="+i); 
         } 
          viod receive(float f) { 
    System.out.println("Received one float data"); 
    System.out.println("f="+f); 
         } 
         viod receive(String s) { 
    System.out.println("Received a String"); 
    System.out.println("s="+s); 
         } 
        } 注意,Java的方法重载要求同名的方法必须有不同的参数表,仅有返回类型不同是不足以区分两个重载的方法。 方法重写(overiding method) 
           在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。 若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。 如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。 
      

  3.   


    class OtherHello {
    public int myVoid(int x)
    {
    return x*5;
    }}
    public class Hello extends OtherHello {
    public static void main(String args[])
    {
    Hello a=new Hello();
    long l=a.myVoid(3);
    System.out.println(l);
    }
    public long myVoid(long x)//这里是不是重写?
    {
    return x*6;
    }}上面的程序应该是重写吧,但为什么结果是15呢,重写了不应该用重写后的方法么
      

  4.   

    Hello中的myVoid(long x)参数列表是long x,OtherHello中的myVoid(int x)参数列表是int x,两者的参数列表不同(一个是long,一个是int)。而且Hello是继承于OtherHello的,也就说myVoid(int x)(OtherHello中的方法)在Hello这个类中也有
    如下:
    public class Hello extends OtherHello {
    public int myVoid(int x)//这个方法通过继承得到,程序中是不用写出来的
        {
            return x*5;
        }    public static void main(String args[])
        {
            Hello a=new Hello();
            long l=a.myVoid(3);//3是int,如果改成3l,那就是18了
            System.out.println(l);
        }
        public long myVoid(long x)
        {
            return x*6;
        }
    }
    所以是重载不是重写。
      

  5.   

    重载:一般指在同一个类中有多个同名的方法,这些方法通过参数的类型和个数不同加以区分。重写:指子类和父类中有同名的方法,此时可以认为子类的方法重写了父类的同名方法(即子类方法有效,而父类方法被隐藏),如果子类想调用父类中的方法,要使用super.方法名。
      

  6.   

    LZ重写就是覆盖啦,重载和这些概念是很好区分的
    还没有看到隐藏,遮蔽,遮掩先别晕哈,Hoho~~