Java,编译错误,构造函数

时间:2015-05-19 14:16:41

标签: java constructor visibility scjp

我一直在尝试模拟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() {}

}

我有编译错误,但是当我删除其中一个构造函数时,如果编译没有任何问题。

有人可以帮我清理一下。

3 个答案:

答案 0 :(得分:7)

关于这个stackoverflow问题的混淆是它关于另一个问题。所以,当人们回答提及问题时,#34;它不清楚哪个。

退货类型和展示次数(publicprivateprotected)对于制作独特签名并不重要。

public class Test8 {
    Test8() {}

    public Test8() {}
}

因为它们具有相同的名称和参数类型,所以就编译器而言,它们是相同的方法,这就是为什么它在删除它时起作用的原因,因为它没有重复。

关于测试问题

  

问题8:以下哪项是有效的构造函数?

     
      
  1. public Test8(){}
  2.   
  3. private void Test8(){}
  4.   
  5. protected Test8(int k){}
  6.   
  7. Test8(){}
  8.   

唯一无效的是2,因为它列出了返回类型(void)。构造者没有返回类型。该网站列出的正确答案为13

  

Q8:

     
      
  • 1是正确的。 public Test8(){}
  •   
  • 3是正确的。 protected Test8(int k){}
  •   

为什么?

  • 他们可能会把它们全部放在一个java文件中,并试图像你一样编译它,并认为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.

}
相关问题