Java条件语句和子类

时间:2015-01-26 09:11:46

标签: java

我是Java的新手,我正试图弄清楚如何动态确定是否使用特定的子类。

这是我破碎的代码:

if(length == width){
    Square myBox = new Square();
}else{
    Rectangle myBox = new Rectangle();
}

我想要做的是当长度和宽度(由用户输入)相等时使用“Square”子类。我不知道如何让它做我想做的事情,所以我使用了来自PHP的更广泛经验的“通用编码逻辑”(显然无济于事;到目前为止,我学习Java的最大困难是从PHP切换到Java在我的脑海里,哈哈)

所以我想知道是否有办法做到这一点。如果没有,那就没关系,我会废弃它。我以为我会问。

4 个答案:

答案 0 :(得分:5)

我假设SquareRectangle的子类。在那种情况下:

Rectangle myBox;

if (length == width) {
    myBox = new Square();
} else {
    myBox = new Rectangle();
}

答案 1 :(得分:1)

首先,您在if语句的分支内声明这些变量 - 它们的范围仅限于这些分支。因此变量myBox仅在这些括号之间可见。这可能不是你想要的。

其次,正如@Robby Cornelissen已经指出的那样 - 如果SquareRectangle的子类,则您需要使用Rectangle

但是,虽然在数学中Square是Rectangle的一个特例,但这是面向对象逻辑的一个典型例子。 Rectangle比Square更多一个属性。正方形只有一边的长度,矩形有宽度和高度。因此,您希望从Rectangle派生Square,即使这有点违反直觉。

答案 2 :(得分:0)

你可以这样做,如果所涉及的类共享一个共同的祖先,并且祖先足以满足你的目的。在这种情况下,将变量声明为共同的祖先类型,但根据所需的标准为其分配new MoreSpecificType()

要使这项工作符合您的要求,您需要做的是将变量声明移到if语句块之外。这样做的原因是,在Java中,当变量声明的块结束时,变量超出范围,因此在代码中,您只能在myBox部分内的...部分执行任何操作。 if() { ... } else { ... }

答案 3 :(得分:0)

Java en PHP之间的主要区别在于早期绑定和后期绑定。在Java中,您必须说明数据类型,以后可能不会更改。以下是有道理的:

Rectangle myBox;
if(length == width){
  myBox = new Square();
}else{
  myBox = new Rectangle()
}

如果SquareRectangle的子类:

,这将编译好
class Square extends Rectangle{};