A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 whocases 于 2012-6-21 13:46 编辑

Overloaded的方法是否可以改变返回值的类型?

9 个回复

倒序浏览
本帖最后由 余银桂 于 2012-6-19 18:24 编辑

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

回复 使用道具 举报
override(重写)是改变了方法体内的实现,并没有改变方法的返回值类型。

overload(重载)是对方法参数进行的扩展,多态的体现,和返回类型无关,返回类型的改变不能看作是方法的重载
回复 使用道具 举报
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
回复 使用道具 举报
下边就是一个重载了例子:
public class Duo1 {
        public static void main(String[] args)
        {
                Father1 s1 = new Father1();
                s1.fangfa1();
                s1.sum(45,34,12);
        }
}
class Father1{
        private int a;
        public void fangfa1()
        {
                System.out.println("AAA");
        }
        public int sum(int x,int y)
        {
                return x+y;
        }
        //参数个数改变
        public int sum(int x,int y,int z)
        {
                return x+y+z;
        }
        //参数的类型改变
        public float sum(float x,float y)
        {
                return x+y;
        }
}
但记住:重载和返回值类型没有关系..

在方法的重载的时候:仅仅是返回类型不同是不可以的!
方法的重载:
1.方法名相同
2.方法的参数类型,个数,顺序至少有一项不同
3.方法返回类型可以不同
4.方法的修饰符可以不同
回复 使用道具 举报
嗯,可以的,重载跟返回值类型没有关系,只要方法名和参数列表相同即可。
回复 使用道具 举报
李伟 中级黑马 2012-6-19 21:02:59
7#
重载的时候返回值类型可以改但不是必须的,必须要改的是参数列表(参数类型或者参数个数)
回复 使用道具 举报
郑冬 中级黑马 2012-6-19 21:05:10
8#
如果几个Overloaded的方法的参数列表不一样,它们的返回者类型当然也可以不一样。但我估计你想问的问题是:如果两个方法的参数列表完全一样,是否可以让它们的返回值不同来实现重载Overload。这是不行的,我们可以用反证法来说明这个问题,因为我们有时候调用一个方法时也可以不定义返回结果变量,即不要关心其返回结果,例如,我们调用map.remove(key)方法时,虽然remove方法有返回值,但是我们通常都不会定义接收返回结果的变量,这时候假设该类中有两个名称和参数列表完全相同的方法,仅仅是返回类型不同,java就无法确定编程者倒底是想调用哪个方法了,因为它无法通过返回结果类型来判断。
回复 使用道具 举报
刘笑 中级黑马 2012-6-19 21:05:54
9#
重载,是在同一个类中和其它方法同名, 但方法的参数列表(参数个数,参数类型等)必须不一致,返回值类型可以不一致。
回复 使用道具 举报
我的理解是,重载可以改变返回值类型,但是如果只是返回值类型不一样是算不上重载的。重载的判断条件还是根据参数来,只不过是说重载的函数可以返回值不一样,就是说重载可以决定返回值类型,但是返回值类型不能决定重载,

温馨提醒:方法重载必须保证方法的传入参数不同哦。

举下列子:public class Test
{
public static void main(String [] args){
  Father f = new Father();
               String s = f.Test(1,2);
               int i = f.Test(1);
               System.out.println(i);
               System.out.println(s);
}
}
class Father{
public int Test(int i){
          i = i;
  return i;
}
        public String Test(int i ,int j){
          String s ="通过不同的方法可以返回不同类型的参数";
          return s ;
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马