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

问题描述:

我有下面的代码的问题...非法修饰的组合:公共和私人

/** 
* 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) { 

只是删除它,你应该罚款。

+0

哇,谢谢。今天看代码太久了。小事情开始让我受益。谢谢 –

+0

这就是为什么最好在单独的行上列出每个班级成员。 – MaxZoom

+0

@MaxZoom即使我同意在单独行上的列表看起来更好,但我不明白如何在单独行上列出来避免该问题 –

班上第三行有一个流浪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) { 
    // ... 
} 

正如你所看到的,你的构造函数有两个修饰语,publicprivate。这在Java中是非法的。

解决方案

  1. 如果你想保持构造private切勿希望其他类实例化它删除关键字public

OR
    如果要允许其他类实例化
  1. 取出关键字private
开始=>