是否可以覆盖重写方法的参数类型?

时间:2019-04-02 11:55:31

标签: java inheritance polymorphism override

有人可以用下面的代码帮助我吗?

我有两个实现接口Controller的类Controller1Controller2,如下所示:

package com.controllers
public interface Controllers{
    public void method1(*****);
}
------------------------------
package com.controllers
public class Controller1{
    public void method1(com.model1.Module1 module);
}
------------------------------
package com.controllers
public class Controller2{
    public void method1(com.model2.Module1 module);
}
------------------------------

我有2个软件包,它们具有以下相同的类(两个类也具有相同的方法)

package com.model1
public class Module1{

}
------------------------
package com.model1
public class Module2{

}
-----------------------
package com.model2
public class Module1{

}
------------------------
package com.model2
public class Module2{

}

我正在使用Factory类在运行时获取Controller1Controller2的实例,因此继承的类中method1的参数类型将有所不同。但是我不能这样做,因为方法签名不能被覆盖。

有人可以建议我替代吗?谢谢...

3 个答案:

答案 0 :(得分:0)

  

我有2个具有相同类的程序包(两个类也具有相同的方法)

为什么没有为Module1创建通用的父接口,然后为Module2创建通用父接口?

看起来像

package com.model1
public class Module1 implements Model {

}
------------------------
package com.model1
public class Module2 implements Model{

}
-----------------------
package com.model2
public class Module1 implements Model{

}
------------------------
package com.model2
public class Module2 implements Model{

}

package com.controllers
public interface Controllers{
    public void method1(Model model);
}

但是我可能错过了您的问题

答案 1 :(得分:0)

无论如何,如果您不想使用Module1或Module2方法,则可以创建一个名称为Method的空接口,这将是一个解决方案。如果要使用他们的方法,则可以执行相同的操作并添加类似的内容(有关Java反射的信息)

package com.controllers
public interface Controllers{
    public void method1(Model model) {
        if (model instanceof com.model1.Module1) {
            com.model1.Module1 module = (com.model1.Module1) model;
            ...
        } else if (model instanceof com.model2.Module1) {
            com.model2.Module1 module = (com.model2.Module1) model;
            ...
        }
    }
}

答案 2 :(得分:0)

为什么不使用一些泛型?

像这样:

LiveData