首先我只放我的示例代码。
public class Shape {
public String colour;
public Shape(String colour) {
this.colour = colour;
}
}
public class Car {
public String colour;
public Car (String colour) {
this.colour = colour;
}
}
public class Colour {
public static String getColour(Object item) {
return item.**colour**;
}
}
我已经阅读了与此相关的其他问题,但我似乎无法理解。我发现他们的原始代码对我来说太复杂了。所以我试图制作尽可能简单的代码。无论如何,我希望 getColour 接受 Shape 和 Car 对象。如果我像在示例中那样使用 Object,则粗体的“颜色”被视为错误。我得到的错误是“颜色无法解析或不是一个字段”。怎么了?
还有,我听说过很多“静态方法不好”之类的,这是不好的情况吗?因为我发现如果不将其设为静态,那么我需要在 Shape 和 Car 类中复制 getColour 方法。如果我应该避免静态方法,那么请建议另一种方法来做到这一点。
最佳答案
你要找的是interfaces的概念:
public interface Colourable {
String getColour();
void setColour(String colour);
}
您应该修改 Shape
和 Car
类:
public class Shape implements Colourable {
public Shape(String colour) {
this.colour = colour;
}
private String colour;
public String getColour() {
return colour;
}
public void setColour(String colour) {
this.colour = colour;
}
}
(请注意,我已将 colour
字段设为私有(private);这是常见做法并称为 encapsulation
)
然后您可以将静态方法定义为
public static String getColour(Colourable item) {
return item.getColour();
}
静态方法绝对不错,虽然在这种情况下方法本身有点多余,因为如果你已经有一个Colourable
,你知道你可以调用.getColour()
来获取它的颜色。更有用的方法是
public static boolean isRed(Colourable item) {
return "red".equals(item.getColour());
}
关于java - 让一个方法接受不同的对象作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31359058/