2017-12-29 12 views
-4

私は2番目の1が 次のようになります 2つのクラスをしている:オブジェクトから情報を取得するには?

public class personal_id{ 
privete int id=0; 
private String name; 
public personal_id(String name){ 
name=this.name; 
id++; 
} 
} 

そしてメインは、私が4つのオブジェクトを作成していると思います

public class creator{ 
public static void main(String[]arg){ 
personal_id obj1=new personal_id("John"); 
personal_id obj2=new personal_id("Jane"); 
personal_id obj3=new personal_id("Jim"); 
personal_id obj4=new personal_id("Lucas"); 
} 
} 

です。 id 1のJane、id 2のJim、id 3のLucasを使用しています。これで、obj3やその他のオブジェクトから情報を取得する方法を知りたいと思います。たとえば、私はオブジェクトの名前とIDを知らない。どうやってやるの?

+2

あなたは 'private'メンバーに簡単にアクセスすることはできません。 * getters *を提供するか、他のアクセス指定子に 'private'を変更してください。あなたは 'personal_id'クラスを変更できますか? – Fureeish

+0

[アクセス修飾子の詳細を読む](https://stackoverflow.com/questions/215497/in-java-difference-between-package-private-public-protected-and-private) – Zachary

答えて

1

あなたはオプションのカップルを持っているが、ここでは一般的に最善のアプローチは、ゲッターを作成することです:

public class PersonalId { // ------------------- renamed: it was "personal_id" 
    private int id = 0; // ------------------- fixed: was "privete" instead of "private" 
    private String name; 
    public PersonalId(String name) { // ------------------- renamed: it was "personal_id" 
     this.name = name; // ----------------- fixed: was "name = this.name" 
     id++; // this line makes little sense, it's the same as declaring id = 1; 
    } 

    public int getId() {  // ------------------- added 
     return this.id;  // ------------------- added 
    }       // ------------------- added 
    public String getName() { // ------------------- added 
     return this.name;  // ------------------- added 
    }       // ------------------- added 
} 

など、それを使用します。

public class Creator { // -------------- renamed: was "creator" 
    public static void main(String[] arg) { 
     PersonalId john = new PersonalId("John"); 
     System.out.println("John's id: "+ john.getId()); 
     System.out.println("John's name: "+ john.getName()); 
    } 
} 

は出力:

John's id: 1 
John's name: John 

一般的に言えば、プロパティの可視性をprivateからpublicに変更することもできます(例えば。 private int id = 0;public int id = 0;)、それはSystem.out.println("John's id: "+ john.id);のように使用しますが、これは一般的に嫌われます。適切なオブジェクトのカプセル化を促進しないため、悪い習慣とみなされます。

Sidenotes

あなたはコメントからわかるように、あなたのコードはまた、他のいくつかの問題を抱えていました。

最初に、クラスの名前はJava naming conventions and guidelinesに違反します。クラスの名前はcamelCaseである必要があります。つまり、personal_idの代わりにが必要です。また、creatorの代わりにCreatorを使用する必要があります(最初の文字に注意してください。大文字にしてください)。

でも

コンストラクタ刻みid

id++; 

しかしid0の開始値(private int id=0;)、idの値は常に建設後1になりますと宣言されているので、それは、ほとんど意味がありません。

+0

ありがとう:) – NikolayLilkin

関連する問題