我是Java的新手,我正试图弄清楚如何动态确定是否使用特定的子类。
这是我破碎的代码:
if(length == width){
Square myBox = new Square();
}else{
Rectangle myBox = new Rectangle();
}
我想要做的是当长度和宽度(由用户输入)相等时使用“Square”子类。我不知道如何让它做我想做的事情,所以我使用了来自PHP的更广泛经验的“通用编码逻辑”(显然无济于事;到目前为止,我学习Java的最大困难是从PHP切换到Java在我的脑海里,哈哈)
所以我想知道是否有办法做到这一点。如果没有,那就没关系,我会废弃它。我以为我会问。
答案 0 :(得分:5)
我假设Square
是Rectangle
的子类。在那种情况下:
Rectangle myBox;
if (length == width) {
myBox = new Square();
} else {
myBox = new Rectangle();
}
答案 1 :(得分:1)
首先,您在if
语句的分支内声明这些变量 - 它们的范围仅限于这些分支。因此变量myBox
仅在这些括号之间可见。这可能不是你想要的。
其次,正如@Robby Cornelissen已经指出的那样 - 如果Square
是Rectangle
的子类,则您需要使用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()
}
如果Square
是Rectangle
的子类:
class Square extends Rectangle{};