Java继承,更改基类中的参数类型

时间:2014-11-14 08:52:45

标签: java inheritance

假设我们有一个Base类,其中包含Object参数的方法,并且在较新的版本中,开发人员决定将Ojbect更改为int

例如:

public class Base {
   public void foo(Object i)
     {
           System.out.println("ahahaa");
     }
}

public class Child extends Base
{
    public void foo(Object i)
   {
       System.out.println("tru-la-la");
   }
}

然后新版Base:

public class Base
{
     public void foo(int i)
     {
           Console.WriteLine("ahahaa");
     }
}

然后,如果我们称之为:

Child child = new Child();
child.foo(5);

我们会得到“ahaha”而不是预期的“tru-la-la”

那么我们如何处理它,以及我们应该使用哪种架构解决方案?

2 个答案:

答案 0 :(得分:2)

好像你没有找到关于你为什么得到的解释" ahaha"而不是" tru-la-la" (您在Base类中更改之前获得的)。

如果要发布要供其他开发人员使用的库,则需要保持向后兼容性。您在Base类中描述的chnage显然不尊重向后兼容性,因此任何依赖它的代码都会破坏。

除了更改代码或停止使用该库之外,您无能为力。

您可以更改代码,例如,通过调用child.foo(new Integer(5))来调用子类方法。

另一件可以帮助的事情是使用@Override注释标记Child类中的方法。这将阻止您的代码在Base类更改后进行编译。

答案 1 :(得分:0)

如果你使用的是int -child.foo(5);那么JVM将自然地采用最具体的子对象中的方法。在这种情况下它是

之间的选择

public void foo(Object i){

&安培;

public void foo(int i){

更具体的是 -

public void foo(int i){ 写“ahahaa”