我刚刚开始学习Java,我遇到了有关方法重载的问题。
我想知道是否可以在有问题的重载方法的另一个变体的范围内调用重载方法的变体。
我的主要问题是: 这样做可能会产生什么问题?
例如:
public class RoomClass {
int roomNo = 1;
String roomType = "Lecture Hall";
String roomArea = "First Floor";
boolean ACMachine = true;
protected void setData(int roomNo, String roomType, String roomArea, boolean ACMachine) {
setData(roomNo);
setData(roomType, roomArea);
setData(ACMachine);
}
protected void setData(int roomNo) {
this.roomNo = roomNo;
}
protected void setData(String roomType, String roomArea) {
this.roomType = roomType;
this.roomArea = roomArea;
}
protected void setData(boolean ACMachine) {
this.ACMachine = ACMachine;
}
}
上面的代码是关于练习的。我在网上或书中找不到我的问题的答案。 我想要做的是避免重复代码,所以我想“为什么不调用其他方法,因为他们正在做我需要的东西?”。所以我只是将所有其他方法聚合到第一个方法中。
答案 0 :(得分:1)
它不仅安全,而且非常常见。 Java没有默认参数值,因此您经常会看到使用更少参数调用重载并使用更多参数并提供默认值的重载。例如:
public void foo(int a, int b) {
// do something with a and b
}
public void foo(int a) {
// supply default value of 0 for b
foo(a, 0);
}
可能出现的一个问题是,如果有人扩展您的课程并覆盖foo(int, int)
。这也会影响foo(int)
的行为,这可能是意料之外的。为防止这种情况发生,您可以制作foo(int, int)
或整个班级final
。如果允许扩展,则应记录哪些方法调用其他方法。对于不应记录实现细节的规则,这是一个罕见的例外。
答案 1 :(得分:0)
这样做没有问题,因为它在编程上是正确的。可以从另一个重载方法调用过载方法。
答案 2 :(得分:0)
完全没有问题。 Java虚拟机可以通过参数数量和数据类型分别识别重载方法。我的例子中没有任何问题。