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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 隋营营 中级黑马   /  2012-5-4 09:46  /  2512 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 隋营营 于 2012-5-9 07:31 编辑

假如有两个接口Painter、Singer,接口中方法名相同,返回值类型不同
interface Painter {
    double getMoney();
}

interface Singer {
    void getMoney();
}
若有一个类实现了这两个接口,必须重写这两个方法,但在重写时会发现:方法不能构成重载,因为参数列表相同。
这时我考虑能否在类中写一个内部类,分别实现这两个接口:
class Lady implements Painter {
    public double getMoney() {
        return 0;
    }

    class Miss implements Singer {
        public void getMoney() {
              System.out.println("中国");
        }
    }
}
在测试类中可以这样创建内部类对象
public class Testext {
    public static void main(String[] args) {
        happy();
    }

    static void happy() {
        System.out.println(new Lady().getMoney());
        new Lady().new Miss().getMoney();
    }
}
可以输出结果:0.0   中国
大家看这种方法是否可行?
非常感谢给出建议!

6 个回复

倒序浏览
哥们,重写是返回值也必须相同的,不然不能称之为重写。当然这人肯定不是重载,因为重载必须是在同一个类中才可以的。这个是报错的,不能这么做。你可以试试,我试过的。
回复 使用道具 举报
给你一个好的建议,觉得有意思的问题,可以自己试试,这样印象会比较的好,这个问题,你提出来,我就度验过了,我记住了。如果还是不能解决问题,提出来问问大家一起商量,这才一个好的学习方法。
回复 使用道具 举报
等待代码解释。思考中。。。。
回复 使用道具 举报
interface Painter
{
    double getMoney();
}

interface Singer
{
    void getMoney();
}

class Lady implements Painter
{
    public double getMoney()
        {
        return 0;
    }

   
}
class Miss implements Singer
        {
        public void getMoney()
                {
              System.out.println("中国");
        }
    }

class Testext
{
    public static void main(String[] args)
        {
        happy();
        }

    static void happy()
        {
        System.out.println(new Lady().getMoney());
        new Miss().getMoney();
    }
}
因为方法名和参数类型相同,同一个类继承两个接口后,调用时JVM不知道执行哪一个,
所以要 两个类来分别实现两个接口,即使不是内部类也行
回复 使用道具 举报
马浩 发表于 2012-5-4 14:29
interface Painter
{
    double getMoney();

对,这个我知道。我的起点是研究能否在一个类中实现这个两个接口中的方法!
回复 使用道具 举报
隋营营 发表于 2012-5-4 14:48
对,这个我知道。我的起点是研究能否在一个类中实现这个两个接口中的方法! ...

最好的是,直接改个名不就完事啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马