通过接口访问子类变量

时间:2013-09-29 08:44:27

标签: java interface

我有以下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);

第二行失败。我无法通过接口访问子类的变量。为什么是这样?我们可以通过以下方法做到这一点:

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

以上三行效果很好 - 换句话说,界面的方法是动态的。为什么变量不一样,有没有解决方法?

1 个答案:

答案 0 :(得分:3)

party 是一个私有实例属性,您需要编写一个公共getter来访问它。 此外,您应该实施您的界面,而不是扩展

我建议用大写字母开始你的类和接口名称,这是Java中的一般命名约定。另一方面,变量不应以大写字母开头。我建议你阅读Code Convention for the Java Programming Language

public class Citizen implements Person {
     public String getParty() {
         return party;
     }    
}