2017-05-16 13 views
-7

編集クラスのJavaなしでJavaで新しいクラス変数やメソッドを作成する方法はあり編集クラスせずに新しいクラス変数のJava +ゲッター/セッターメソッドを追加

例:

私が持っているクラスPerson

public class Person { 

    private String name; 
    private String address; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getAddress() { 
     return address; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 
} 

とメインクラスで私はこのように処理:

Person personData = new Person(); 
    personData.setName("My Name"); 
    personData.setAddress("Address"); 

    List<Person> person = new ArrayList<Person>(); 
    person.add(personData); 

私は追加したいです新しい人物一覧 における変数とsetNo();getNo();

だから、リストインデックスは[0]最初のクラスPersonを編集せずに物件番号、名前、住所を持つ人を持っています。

+0

存在しないプロパティ( 'No')を取得/設定することはできません。 – user7

+0

Javaは強く型付けされています。これはこの考え方に反するものです。 – Schcriher

+0

この「いいえ」プロパティは何ですか?そのような財産が必要だと思う理由の例を挙げていません。おそらく、それなしであなたが望むものを達成する別の方法があります。 –

答えて

1

クラスソースコードを変更せずにクラスにメソッドを追加する方法はありません。

このクラスから拡張する(Personから継承するサブクラスを作成する)か、Personオブジェクトを含む完全に新しいクラスを作成することが唯一の可能性です。

最初のコンセプトは、継承と呼ばれます。第2のもの組成。たとえば、 "one versus other"の説明はhereです。

しかし、本質的には答え:ステップバックとJavaに関する良い本を読んでください。

+0

前者は "継承"と呼ばれ、後者は「コンポジション対継承」(https://www.google.com/search?q=Composition+vs+Inheritance)を参照してください。 – Andreas

+0

@アンドレアスアイデアのおかげで、私の答えにそれを追加しました。 – GhostCat

0

おそらくPersonを拡張する別のクラスを作成します。

import java.util.ArrayList; 
import java.util.List; 

public class PersonNo extends Person { 
    public static void main(String[] args) { 
     PersonNo personData = new PersonNo(); 
     personData.setName("My Name"); 
     personData.setAddress("Address"); 

     List<PersonNo> person = new ArrayList<>(); 
     person.add(personData); 
    } 

    public void setNo(int n) { 
     this.no = n; 
    } 

    public int getNo() { 
     return this.no; 
    } 

    private int no; 
} 

これは「PersonNo」にリストの種類を変更すると、「PersonNo」Sを追加する必要がありますが、それはあなたが必要な機能を提供します。 "Person"でリストを作成すると、 "PersonNo"を追加できますが、 "Person"を(PersonNo)にキャストしない限り、setNo/getNoはありません。

関連する問題