两个不同的对象类型作为参数,返回一种类型的对象

时间:2012-12-12 19:50:54

标签: java object

我遇到了这样的问题 - 有一个抽象类,还有许多继承自该类的类。我有一个函数,它作为非抽象类的参数对象。它必须返回非抽象类的对象,但我知道在运行时哪个是异常的。有什么想法吗?

这里是示例代码,它的外观如下:

public abstract class Shape {
    int x, y;
    void foo();
}

public class Circle extends Shape {
    int r;
    void bar();
}

public class Square extends Shape {
    int a;
    void bar();
}

在两个类中,方法bar()执行相同的操作。现在做这样的事情:

/* in some other class */
public static Shape iHateWinter(Shape a, Shape b) {
    Random rnd = new Random();
    Shape result;

    /* 
     btw. my second question is, how to do such thing: 
     a.bar(); ?
    */

    if(rnd.nextInt(2) == 0) {
       /* result is type of a */
    } else {
       /* result is type of b */
}

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

public var abstract bar() {}放入抽象类中。

然后所有孩子都必须实施bar()

然后你的if-block将是

if(rnd.nextInt(2) == 0) {
      return a;
    } else {
      return b;
    }

答案 1 :(得分:2)

你似乎让自己变得复杂。

/* 
 btw. my second question is, how to do such thing: 
 a.bar(); ?
*/

您将bar()添加到Shape并致电a.bar();;

 if(rnd.nextInt(2) == 0) {
    /* result is type of a */
 } else {
    /* result is type of b */

这是相当迟钝的编码。如果您不打算使用它,那么为什么要传递一个对象并不清楚。即你只需要它的课程。

 result = rnd.nextBoolean() ? a.getClass().newInstance() : b.getClass().newInstance();

答案 2 :(得分:0)

或者你可以进行一场演员表。

if(a instanceof Circle)
{ Circle c = (Circle) a;
  c.bar();
}

if(a instanceof Square)
{ Square s = (Square) a;
  s.bar();
}