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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© a504079589 中级黑马   /  2012-2-22 22:38  /  2483 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如果继承的方法和实现的方法名字相同!但返回值不同!在调用的时候会不会发生冲突!为什么!

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

14 个回复

倒序浏览
你是想说方法的重载是不是你能根据返回值的不同来区分是吧,我明确告诉你是不行的,下面引用《java编程思想》一句话:如 下面两个方法 int f(){}  void f(){} 如果要编译器根据语境判断比如 int x=f();那么可以确定区分重载方法,但是你可以调用该方法而忽略返回值,如果像下面这样调用
f();
此时该如何来判断调用了哪个方法呢?因此根据方法的返回值来区分重载是行不通的。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
本帖最后由 黄凯 于 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:03
回复 使用道具 举报
这种方法不可以写吧,名字一样,参数一样返回不一样的话会出错的应该,因为虚拟机不知道你到底要调那个方法
回复 使用道具 举报
本帖最后由 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;
        }
}

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
一句话重载不可以用返回值类型不同来区分!
回复 使用道具 举报
刘丁 黑马帝 2012-2-23 10:46:03
7#
重载是根据参数列表不同来区分的,如果参数列表相同的,那在调用时java就不知道调用哪个方法了。
回复 使用道具 举报
张猛 初级黑马 2012-2-23 10:51:19
8#
  重载是根据方法括号内参数的类型、多少来区分,不是根据返回值来区分
回复 使用道具 举报
@Override
是重载符号,只有子类的方法(名字,参数,返回值)与父类一致时才是override
也就是在Eclipse等IDE中在子类方法上加上@Override重载表示符才不会报错,
如果不是重载的话,加@Overide会报错的。

如果不是重载的话,两个只有返回值不同的方法……你觉得会冲突么?(父类中没有被重载非private的方法可以简单当做是子类的方法)   

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
应该不冲突吧,并不是在一个类中,只是继承父类的方法,不属于重载,调用的时候默认是创建的子类对象的方法,要调用父类的,用super引用
回复 使用道具 举报
重载不可以用返回值类型不同来区分,如果你这样做了,编译是无法通过的
回复 使用道具 举报
也不是完全不行,重写时,如果子类的返回值小于父类的返回值是可以的。
回复 使用道具 举报
子类中是不允许有和父类的方法名字相同,参数列表相同但返回值不同的函数存在的,
如果非要有不同,那么子类的该方法的返回值类型必须是父类相应方法返回值类型的子类
如:
父类的方法:public Object function(){}
子类的方法:public String function(){}

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
肯定会冲突的,当引用时,系统怎么会知道改用那个方法。
回复 使用道具 举报
本身就是不允许的 就没有什么冲突不冲突
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马