0

次の Java コードがあります。

public interface Person {
    int eat (String food);
    int sleep (int time);
    boolean coitus (person partner);
}

public class Citizen implements Person {
    private int passion;
    private int morality;
    private String party;
    public citizen () {
        passion = 0;
        morality = 100;
        party = "Democrat";
    }
    public boolean coitus (person partner) {
        passion += 10;
        morality -= 10;
        return true;
    }
    ... rest of implementation methods
}

メインメソッドには、次の行があります。

 Person Jon = new Citizen();
 System.out.println(Jon.party);

2 行目は失敗します。インターフェイス経由でサブクラスの変数にアクセスできません。どうしてこれなの?これは、メソッドを使用して問題なく実行できます。

 Person Jon = new Citizen();
 Person Romney = new Citizen();
 System.out.println(Jon.coitus(Romney));

上記の 3 行は問題なく機能します。つまり、インターフェイスのメソッドは動的です。変数と同じではないのはなぜですか?これを回避する方法はありますか?

4

1 に答える 1

3

partyはプライベート インスタンス属性であるため、アクセスするにはパブリック ゲッターを記述する必要があります。また、インターフェースを拡張するのではなく、インターフェースを実装する必要があります。

また、クラス名とインターフェイス名を大文字で始めることをお勧めします。これは、Java の一般的な命名規則です。一方、変数は大文字で始めるべきではありません。Code Convention for the Java Programming Languageを読むことをお勧めします。

public class Citizen implements Person {
     public String getParty() {
         return party;
     }    
}
于 2013-09-29T08:48:24.797 に答える