Java,编译错误,构造函数
我一直在尝试模拟OCJP6测试。我问了一个问题,问构造器是否正确: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() {} } 我有编译错误,但当我删除其中一个构造函数时,如果编译没
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失败的原因。