非法修饰的组合:公共和私人
问题描述:
我有下面的代码的问题...非法修饰的组合:公共和私人
/**
* This class holds all of the information pertaining to
* a person's name.
*/
public class Name {
private String first, middle, last, maiden, initials, prefix, suffix;
private char middleInitial, firstInitial, lastInitial;
private
/**
* Constructor for a Name given first, middle, and last names.
*/
public Name(String first, String middle, String last) {
this.first = first;
this.middle = middle;
this.last = last;
this.middleInitial = middle.charAt(0);
this.firstInitial = first.charAt(0);
this.lastInitial = last.charAt(0);
this.initials = String.valueOf(firstInitial + middleInitial
+ lastInitial);
this.maiden = null;
this.prefix = null;
this.suffix = null;
}
还有更多,但我的错误是在我的主构造的到来。它给了我在标题中输入的错误。正如你所看到的,我的课程和构造函数都是公开的。这不应该导致任何问题,但似乎这样做。
答
你有一个“孤儿”的构造函数的评论前private
修改:
private // Here!
/**
* Constructor for a Name given first, middle, and last names.
*/
public Name(String first, String middle, String last) {
只是删除它,你应该罚款。
答
班上第三行有一个流浪private
。由于语句持续到遇到大括号或分号时,编译器认为这是与构造函数声明相同的语句的一部分 - 它看到private public Name(String first, String middle, String last)
。
+0
哇,谢谢。今天看代码太久了。小事情开始让我受益。谢谢 –
答
声明所有变量后,您已写入关键字private
。
private String first, middle, last, maiden, initials, prefix, suffix;
private char middleInitial, firstInitial, lastInitial;
private // Here.
Java是一种自由型语言。一行以;
(分号)结尾,而不是换行符。所以
private
public Name(String first, String middle, String last) {
// ...
}
被认为是一个单一的路线为:
private public Name(String first, String middle, String last) {
// ...
}
正如你所看到的,你的构造函数有两个修饰语,public
和private
。这在Java中是非法的。
解决方案
- 如果你想保持构造
private
和切勿希望其他类实例化它删除关键字public
。
-
如果要允许其他类实例化
- 取出关键字
private
。
哇,谢谢。今天看代码太久了。小事情开始让我受益。谢谢 –
这就是为什么最好在单独的行上列出每个班级成员。 – MaxZoom
@MaxZoom即使我同意在单独行上的列表看起来更好,但我不明白如何在单独行上列出来避免该问题 –