Java 通过接口访问子类变量

Java 通过接口访问子类变量,java,interface,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;

我有以下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));
以上三行工作得很好——换句话说,接口的方法是动态的。为什么变量不一样?有没有办法解决这个问题?

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

我建议以大写字母开头类和接口名称,这是Java中的通用命名约定。另一方面,变量不应该以大写字母开头。我建议你读一下这本书

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

我建议以大写字母开头类和接口名称,这是Java中的通用命名约定。另一方面,变量不应该以大写字母开头。我建议你读一下这本书


尝试阅读java约定。。类和接口是大写的,变量不是。代码比较容易读。对不起,我忘了把名字大写。现在就可以了。试着阅读java约定。。类和接口是大写的,变量不是。代码比较容易读。对不起,我忘了把名字大写。现在就可以了。所以,如果party是静态的,我可以在没有公共getter的情况下访问它?您必须区分访问级别修饰符(public、private、protected)和属性是实例还是类属性。如果您的实例属性party是public的,您就可以直接访问它:jon.party。如果它是静态的,您就可以通过您的类:Jon.party访问它。同样在这种情况下,该类的所有实例的状态都是相同的,这不是您想要的。总之,为需要访问的每个私有属性添加一个公共getter。因此,如果参与方是静态的,我可以在没有公共getter的情况下访问它?您必须区分访问级别修饰符(public、private、protected)和属性是实例还是类属性。如果您的实例属性party是public的,您就可以直接访问它:jon.party。如果它是静态的,您就可以通过您的类:Jon.party访问它。同样在这种情况下,该类的所有实例的状态都是相同的,这不是您想要的。最后,为您需要访问的每个私有属性添加一个公共getter。
public class Citizen implements Person {
     public String getParty() {
         return party;
     }    
}