黑马程序员技术交流社区

标题: 继承两个接口时方法冲突的解决办法 [打印本页]

作者: 隋营营    时间: 2012-5-4 09:46
标题: 继承两个接口时方法冲突的解决办法
本帖最后由 隋营营 于 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   中国
大家看这种方法是否可行?
非常感谢给出建议!


作者: 刘_浩    时间: 2012-5-4 12:32
哥们,重写是返回值也必须相同的,不然不能称之为重写。当然这人肯定不是重载,因为重载必须是在同一个类中才可以的。这个是报错的,不能这么做。你可以试试,我试过的。
作者: 刘_浩    时间: 2012-5-4 12:34
给你一个好的建议,觉得有意思的问题,可以自己试试,这样印象会比较的好,这个问题,你提出来,我就度验过了,我记住了。如果还是不能解决问题,提出来问问大家一起商量,这才一个好的学习方法。
作者: 魏涞    时间: 2012-5-4 12:40
等待代码解释。思考中。。。。
作者: 马浩    时间: 2012-5-4 14:29
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:48
马浩 发表于 2012-5-4 14:29
interface Painter
{
    double getMoney();

对,这个我知道。我的起点是研究能否在一个类中实现这个两个接口中的方法!
作者: 马浩    时间: 2012-5-4 14:54
隋营营 发表于 2012-5-4 14:48
对,这个我知道。我的起点是研究能否在一个类中实现这个两个接口中的方法! ...

最好的是,直接改个名不就完事啦




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