Java,编译错误,构造函数
Java, compilation error, Constructors
我一直在尝试模拟 ocjp 6 测试。我问了一个问题,询问构造函数是否正确:
1- public Test8(){}
2- private void Test8(){}
3- protected Test8(int k){}
4- Test8(){}
正确答案是 1 和 3。我不明白为什么 4 不正确。当我测试以下代码时:
public class Test8 {
Test8() {}
public Test8() {}
}
我有编译错误,但是当我删除其中一个构造函数时,如果编译没有任何问题。
请有人帮我解决一下。
您不能使用相同的参数(在这种情况下没有参数)重新声明相同的构造函数
您首先定义了一个私有构造函数。
然后你正在定义一个 public 构造函数但具有相同数量的参数。
您需要选择是要私有构造函数还是 public 构造函数。
public class Test8 {
Test8() {}// Or this one
public Test8() {} // Or this one. but not both.
}
唯一明智的答案是模拟考试答案不正确。 1、3 和 4 是有效的构造函数。将 1 和 4 作为相同 class 的构造函数可能无效,但问题并未提出这个问题。
关于这个 Whosebug 问题的令人困惑的是它是关于另一个问题的。所以当人们回答提到 "question" 时,不清楚是哪个。
对于你的为什么不能编译的问题,这是因为它们都具有相同的签名(方法名称和参数)。 Return 类型和可见性(public
、private
、protected
)对于制作唯一签名无关紧要。
public class Test8 {
Test8() {}
public Test8() {}
}
因为它们都具有相同的名称和参数类型,所以就编译器而言,它们是相同的方法,这就是为什么当您删除一个时它起作用的原因,因为它没有重复项。
至于试题
Q8: Which of the following are valid Constructors?
public Test8(){}
private void Test8(){}
protected Test8(int k){}
Test8(){}
唯一无效的是 2
,因为它列出了 return 类型 (void
)。构造函数没有 return 类型。尽管该网站将正确答案列为 1
和 3
。
Q8:
- 1 is correct.
public Test8(){}
.
- 3 is correct.
protected Test8(int k){}
.
为什么?
- 可能他们将它们全部放在一个 java 文件中并尝试像您一样编译它并认为
4
无效。
- 也许他们认为构造函数需要可见性修饰符?
- 也许这是一个措辞糟糕的问题,他们的意思是 "which of these can be used together starting from the top, ones below the cause the compilation to fail are incorrect"
无论您如何划分,该网站上的 question/answer 都很差。
我一直在尝试模拟 ocjp 6 测试。我问了一个问题,询问构造函数是否正确:
1- public Test8(){}
2- private void Test8(){}
3- protected Test8(int k){}
4- Test8(){}
正确答案是 1 和 3。我不明白为什么 4 不正确。当我测试以下代码时:
public class Test8 {
Test8() {}
public Test8() {}
}
我有编译错误,但是当我删除其中一个构造函数时,如果编译没有任何问题。
请有人帮我解决一下。
您不能使用相同的参数(在这种情况下没有参数)重新声明相同的构造函数
您首先定义了一个私有构造函数。 然后你正在定义一个 public 构造函数但具有相同数量的参数。
您需要选择是要私有构造函数还是 public 构造函数。
public class Test8 {
Test8() {}// Or this one
public Test8() {} // Or this one. but not both.
}
唯一明智的答案是模拟考试答案不正确。 1、3 和 4 是有效的构造函数。将 1 和 4 作为相同 class 的构造函数可能无效,但问题并未提出这个问题。
关于这个 Whosebug 问题的令人困惑的是它是关于另一个问题的。所以当人们回答提到 "question" 时,不清楚是哪个。
对于你的为什么不能编译的问题,这是因为它们都具有相同的签名(方法名称和参数)。 Return 类型和可见性(public
、private
、protected
)对于制作唯一签名无关紧要。
public class Test8 {
Test8() {}
public Test8() {}
}
因为它们都具有相同的名称和参数类型,所以就编译器而言,它们是相同的方法,这就是为什么当您删除一个时它起作用的原因,因为它没有重复项。
至于试题
Q8: Which of the following are valid Constructors?
public Test8(){}
private void Test8(){}
protected Test8(int k){}
Test8(){}
唯一无效的是 2
,因为它列出了 return 类型 (void
)。构造函数没有 return 类型。尽管该网站将正确答案列为 1
和 3
。
Q8:
- 1 is correct.
public Test8(){}
.- 3 is correct.
protected Test8(int k){}
.
为什么?
- 可能他们将它们全部放在一个 java 文件中并尝试像您一样编译它并认为
4
无效。 - 也许他们认为构造函数需要可见性修饰符?
- 也许这是一个措辞糟糕的问题,他们的意思是 "which of these can be used together starting from the top, ones below the cause the compilation to fail are incorrect"
无论您如何划分,该网站上的 question/answer 都很差。