从多个继承的类返回抽象类

时间:2012-10-21 20:40:01

标签: java

我正在尝试执行以下操作:

abstract class G {
    protected var = 0;
}

class G1 extends G {
    var = 1;
}

class G2 extends G {
    var = 2;
}

// This is where I'm having a problem
public G method() {
    switch(someVar) {
        case x:
            return new G1();
        case y:
            return new G2();
    }
 }

Java抱怨该方法必须返回一种G类型。我应该如何返回G1或G2(两者都延伸G)?很可能我正在接近这个完全错误的......

谢谢。

2 个答案:

答案 0 :(得分:4)

您的问题与继承无关;如果您的交换机不属于Gcase x,则必须抛出异常或返回case y类型的内容。

例如:

public G method() {
    switch(someVar) {
        case x:
            return new G1();
        case y:
            return new G2();
        default:
            // You can return null or a default instance of type G here as well.
            throw new UnsupportedOperationException("cases other than x or y are not supported.");
    }
 }

答案 1 :(得分:0)

switch-case块中添加默认选项:

        default: ....

抱怨是因为如果someVar不是xy,那么它就没有任何退货声明。

或者,您可以添加默认return statement in the end e.g。

  public G method() {
    switch(someVar) {
       case x:
        return new G1();
       case y:
        return new G2();
     }
     return defaultValue; // return default
  }