Java 通过接口访问子类变量
我有以下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;
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;
}
}