在子类java中更改类变量类型

时间:2014-12-12 03:57:07

标签: java inheritance polymorphism

我有一个名为" Module"

的课程
public abstract class Module {

    protected Map<String, Port> ports;

    ...

    public Map<String, Port> getPorts() {
        return ports;
    }
}

和一个名为Design的类,它是Module

的子类
public class Design extends Module{
    ...

    //want to do this but doesn't compile
    @override
    public Map<String, Port> getPorts() {
        return (Map<String, TopPort>) ports;  //TopPort is a subclass of Port
    }
}

基本上我想要做的只是将TopPorts添加到Design中,并且在从getPorts()函数返回时已经转换了类型。

我现在正在做的是在getPorts函数返回main之后将Ports转换为TopPorts,但这非常有问题,并且正在构建我的代码的人无法立即了解何时返回TopPort。

我还尝试创建另一个函数,而不是重写getPorts()

    //want to do this as well but doesn't compile
    public Map<String, TopPort> getTopPorts() {
        return (Map<String, TopPort>) ports;  //TopPort is a subclass of Port
    }

这样做的正确方法是什么?


更具体的问题

我一直在玩代码,我可以在我的&#34; Design&#34;类:

public TopPort getTopPortByName(String porName) {
    return (TopPort) ports.get(porName);
}

public void addPort(TopPort port) {
    this.ports.put(port.getName(), port);
}

然而,每当我尝试进行这种投射时,它都不起作用:

return (Map<String, TopPort>) this.ports;

为什么类型转换不适用于整个地图,即使它适用于每个成员?

1 个答案:

答案 0 :(得分:3)

你需要让你的班级变得通用。

public abstract class Module<P extends Port> {

   protected Map<String, P> ports;

   public Map<String, P> getPorts() {
      return ports;
   }
}


class Design extends Module<TopPort> { }

我不确定这在这里是否有点过分。