Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,编译错误,构造函数_Java_Constructor_Visibility_Scjp - Fatal编程技术网

Java,编译错误,构造函数

Java,编译错误,构造函数,java,constructor,visibility,scjp,Java,Constructor,Visibility,Scjp,我一直在尝试模拟OCJP6测试。我问了一个问题,问构造器是否正确: 1- public Test8(){} 2- private void Test8(){} 3- protected Test8(int k){} 4- Test8(){} 正确答案是1和3。我不明白为什么4是不正确的。当我测试以下代码时: public class Test8 { Test8() {} public Test8() {} } 我有编译错误,但当我删除其中一个构造函数时,如果编译没

我一直在尝试模拟OCJP6测试。我问了一个问题,问构造器是否正确:

 1- public Test8(){}
 2- private void Test8(){}
 3- protected Test8(int k){}
 4- Test8(){}
正确答案是1和3。我不明白为什么4是不正确的。当我测试以下代码时:

public class Test8 {
    Test8() {}

    public Test8() {}

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


有人可以帮我澄清一下。

您不能用相同的参数重新声明相同的构造函数(在这种情况下没有参数)

首先定义一个私有构造函数。 然后定义一个公共构造函数,但参数数量相同

您需要选择您想要的是私有构造函数还是公共构造函数

public class Test8 {
    Test8() {}// Or this one

    public Test8() {} // Or this one. but not both.

}

唯一合理的答案是模拟考试答案键不正确。1、3和4是有效的构造函数。将1和4作为同一类的构造函数可能是无效的,但问题并没有问到这一点

这个stackoverflow问题让人困惑的是,它是关于另一个问题的。因此,当人们回答“问题”时,不清楚是哪个


关于为什么不能编译这个问题,这是因为它们都有相同的签名(方法名和参数)。返回类型和可见性(
public
private
protected
)对于生成唯一签名并不重要

public class Test8 {
    Test8() {}

    public Test8() {}
}
因为它们都有相同的名称和参数类型,所以就编译器而言,它们是相同的方法,这就是为什么当您删除一个方法时它会起作用,因为它没有重复的方法


至于试题

问题8:以下哪项是有效的构造函数?
  • publictest8(){}
  • private void Test8(){}
  • protectedtest8(intk){}
  • Test8(){}
  • 唯一无效的是
    2
    ,因为它列出了返回类型(
    void
    )。构造函数没有返回类型。该网站将正确答案列为
    1
    3

    问题8:
    • 1是正确的<代码>公共测试8(){}
    • 3是正确的<代码>受保护的Test8(int k){}
    为什么?

    • 可能他们把它们都放在一个java文件中,并试图像你一样编译它,认为
      4
      是无效的
    • 也许他们认为构造函数需要可见性修改器
    • 也许这是一个措辞糟糕的问题,他们的意思是“从顶部开始,哪一个可以一起使用,下面那些导致编译失败的原因是不正确的?”

    无论你如何划分,该网站上的问题/答案都很差。

    1、3和4在我看来都不错。你确定你完整正确地抄写了这个问题吗?问题8,检查答案,复制/通过类并尝试它编译错误是因为构造函数是相同的,如果调用构造函数,计算机看不到要使用的构造函数。如果你想检查,请分别测试每个人。他们不会问你是否可以一次全部使用,他们只问哪些是无效的。
    4
    的唯一问题是它是
    package private
    ,这意味着它不能在中声明的
    package
    之外使用,这是不寻常的,但可能是故意的。问题本身没有提到多个构造函数。是的,你是对的,我声明它是包(不是私有的)和公共的,但arg没有改变,是的。这回答了第二个问题。@每个人都回答了部分问题。问题的措辞有点让人困惑,因为op实际上在问什么……op问什么错了,为什么不对。原因是简单的java规则。不能有两个具有相同数量参数的构造函数/方法。整个问题都围绕着他想要理解为什么失败。这就是为什么他的编译错误发生,以及为什么问题4失败的原因。