修饰符的非法组合:公共和私有



我在以下代码中遇到问题...

/**
 * 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;
    }

还有更多,但我的错误出现在我的主要构造函数中。它给了我在标题中输入的错误。如您所见,我的类和构造函数都是公共的。这应该不会导致任何问题,但似乎正在这样做。

在构造函数的注释之前有一个"orphan"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)

声明所有变量后,您编写了关键字 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) {  
  // ...
}  

如您所见,构造函数有两个修饰符,publicprivate 。这在爪哇是非法的。

溶液

  1. 如果要保持构造函数private并且不希望其他类实例化它,请删除关键字 public

  1. 如果要允许其他类实例化关键字 private,请将其删除。

相关内容

  • 没有找到相关文章

最新更新