黑马程序员技术交流社区

标题: 面向对象的问题 [打印本页]

作者: a504079589    时间: 2012-2-22 22:38
标题: 面向对象的问题
如果继承的方法和实现的方法名字相同!但返回值不同!在调用的时候会不会发生冲突!为什么!
作者: 马胜平    时间: 2012-2-22 22:51
你是想说方法的重载是不是你能根据返回值的不同来区分是吧,我明确告诉你是不行的,下面引用《java编程思想》一句话:如 下面两个方法 int f(){}  void f(){} 如果要编译器根据语境判断比如 int x=f();那么可以确定区分重载方法,但是你可以调用该方法而忽略返回值,如果像下面这样调用
f();
此时该如何来判断调用了哪个方法呢?因此根据方法的返回值来区分重载是行不通的。
作者: 黄凯    时间: 2012-2-22 23:01
本帖最后由 黄凯 于 2012-2-22 23:08 编辑

不会~!
例子:
class Person {
    public String smile()
    {
         return "haha~!";
    }
}
Student extends Person {
       public String smile()
       {
              return "xixi~!";
       }
}
class Test {
        public static void main(String[] args) {
                Student s = new Student();
                s.smile();
        }
}
返回值:
xixi~!

子类从父类继承的方法,子类有自己的实现方式,称之为复写。new的是子类对象,方法返回的是子类方法返回的结果。
new的是父类对象,方法返回的则是父类方法返回的结果。

作者: 沈样    时间: 2012-2-22 23:26
这种方法不可以写吧,名字一样,参数一样返回不一样的话会出错的应该,因为虚拟机不知道你到底要调那个方法
作者: H07000223    时间: 2012-2-22 23:37
本帖最后由 H07000223 于 2012-2-22 23:38 编辑

方法名相同&&返回类型不同,这个意思?

如果是这样的话,显然不行~~~

试想以下代码,你知道自己到底调用的是哪个方法吗
public class Test
{
        public static void main(String[] args)
    {
            User u=new User();
            System.out.println(u.getInfo() );
    }
}


class User
{
        private String name;
        private int age;
        
        public int getInfo()        {
                return this.age;
        }
        
        public String getInfo()        {
                return this.name;
        }
}
作者: 石德志    时间: 2012-2-23 10:33
一句话重载不可以用返回值类型不同来区分!
作者: 刘丁    时间: 2012-2-23 10:46
重载是根据参数列表不同来区分的,如果参数列表相同的,那在调用时java就不知道调用哪个方法了。
作者: 张猛    时间: 2012-2-23 10:51
  重载是根据方法括号内参数的类型、多少来区分,不是根据返回值来区分
作者: 成都校区    时间: 2012-2-23 10:55
@Override
是重载符号,只有子类的方法(名字,参数,返回值)与父类一致时才是override
也就是在Eclipse等IDE中在子类方法上加上@Override重载表示符才不会报错,
如果不是重载的话,加@Overide会报错的。

如果不是重载的话,两个只有返回值不同的方法……你觉得会冲突么?(父类中没有被重载非private的方法可以简单当做是子类的方法)   
作者: 唐兴旺    时间: 2012-2-23 15:39
应该不冲突吧,并不是在一个类中,只是继承父类的方法,不属于重载,调用的时候默认是创建的子类对象的方法,要调用父类的,用super引用
作者: 朱皓    时间: 2012-2-23 17:08
重载不可以用返回值类型不同来区分,如果你这样做了,编译是无法通过的
作者: 【专】【属】    时间: 2012-2-23 17:17
也不是完全不行,重写时,如果子类的返回值小于父类的返回值是可以的。
作者: 李晓俊老师    时间: 2012-2-23 18:31
子类中是不允许有和父类的方法名字相同,参数列表相同但返回值不同的函数存在的,
如果非要有不同,那么子类的该方法的返回值类型必须是父类相应方法返回值类型的子类
如:
父类的方法:public Object function(){}
子类的方法:public String function(){}
作者: 雷楚光    时间: 2012-2-23 18:39
肯定会冲突的,当引用时,系统怎么会知道改用那个方法。
作者: 泮和顺    时间: 2012-2-23 18:52
本身就是不允许的 就没有什么冲突不冲突




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