2015-06-19 51 views
1

我有下面的代碼的問題...非法修飾的組合:公共和私人

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

    } 

還有更多,但我的錯誤是在我的主構造的到來。它給了我在標題中輸入的錯誤。正如你所看到的,我的課程和構造函數都是公開的。這不應該導致任何問題,但似乎這樣做。

回答

12

你有一個「孤兒」的構造函數的評論前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即使我同意在單獨行上的列表看起來更好,但我不明白如何在單獨行上列出來避免該問題 –

6

班上第三行有一個流浪private。由於語句持續到遇到大括號或分號時,編譯器認爲這是與構造函數聲明相同的語句的一部分 - 它看到private public Name(String first, String middle, String last)

+0

哇,謝謝。今天看代碼太久了。小事情開始讓我受益。謝謝 –

2

聲明所有變量後,您已寫入關鍵字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 如果要允許其他類實例化
  • 取出關鍵字private