我一直在尝试模拟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() {}
}
我有编译错误,但是当我删除其中一个构造函数时,如果编译没有任何问题。
有人可以帮我清理一下。
答案 0 :(得分:7)
关于这个stackoverflow问题的混淆是它关于另一个问题。所以,当人们回答提及问题时,#34;它不清楚哪个。
退货类型和展示次数(
public
,private
,protected
)对于制作独特签名并不重要。
public class Test8 {
Test8() {}
public Test8() {}
}
因为它们具有相同的名称和参数类型,所以就编译器而言,它们是相同的方法,这就是为什么它在删除它时起作用的原因,因为它没有重复。
关于测试问题
问题8:以下哪项是有效的构造函数?
public Test8(){}
private void Test8(){}
protected Test8(int k){}
- 醇>
Test8(){}
唯一无效的是2
,因为它列出了返回类型(void
)。构造者没有返回类型。该网站列出的正确答案为1
和3
。
Q8:
- 1是正确的。
public Test8(){}
。- 3是正确的。
protected Test8(int k){}
。
为什么?
4
无效。无论你如何分割它,该网站上的问题/答案都很差。
答案 1 :(得分:2)
唯一合理的答案是模拟考试答案密钥不正确。 1,3和4是有效的构造函数。将1和4作为同一类的构造函数可能无效,但问题没有提出。
答案 2 :(得分:0)
您不能使用相同的参数重新声明相同的构造函数(在本例中没有参数)
您首先要定义一个私有构造函数。 然后,您将定义一个公共构造函数,但具有相同数量的参数。
您需要选择私有或公共构造函数。
public class Test8 {
Test8() {}// Or this one
public Test8() {} // Or this one. but not both.
}