我不得不用相似的成员变量和方法创建两个不同的类,除了其中两个没有的方法。因此,我决定将一个不完整类的实例创建到另一个类中,以免出现重复的代码。
所以它们看起来像这样:
public class Beast{
private int speed;
//other variables & methods
...
}
&
public class Hero{
private int speed;
//other variables
...
Beast beast = new Beast();
...
}
我如何比较speed
实例的Beast
变量和Hero
实例的变量而不在两个类,获取器或反射类之间使用任何形式的继承? (也许接口会帮助我,因为我仍处于早期Java学习阶段,所以我不知道)
答案 0 :(得分:1)
如果这只是一个难题,可以通过以下几种方法来实现,而无需继承,获取或反思。
嵌套类可以访问其封闭类的私有变量,以及同一范围内的其他嵌套类。
class Outer {
public static class Hero { private int speed; }
public static class Beast { private int speed; }
}
在该示例中,Hero
和Beast
现在可以访问彼此的私有speed
变量。这意味着Hero
类只能执行this.speed == aBeast.speed
,或者就是您想比较。
使用参数传递。
public class Beast {
private int speed;
public boolean isSpeedEqualTo(int speed) {
return this.speed == speed;
}
}
然后例如Hero
可以说aBeast.isSpeedEqualTo(this.speed)
。
但是,使用getters更有意义,并且似乎speed
变量也应该在Hero
和Beast
都扩展的超类中声明。
答案 1 :(得分:0)
如果未在组合类中提供吸气剂,则无法比较这些不同类的实例的points = points.redim.range(data=(-0.2, 1))
字段。
不作反思,您可以有两种选择:
private
,这通常是不好的做法public
中引入了一种比较方法来比较速度并提供其他类中的吸气剂。您无需在Hero
中提供getter,因为可以在类的实例方法中访问私有字段。第二种方式可能是:
Hero
您现在可以做:
public class Beast{
private int speed;
public Beast(int speed){
...
}
public int getSpeed(){
return speed;
}
}
public class Hero {
private int speed;
private Beast beast;
public Hero (int speed, Beast beast){
...
}
// just an example to use speed from the both instances
public boolean isMoreFast(){
return speed > beast.getSpeed();
}
}
答案 2 :(得分:0)
我相信,没有继承,获取者或反思,您将无法做到这一点。
声明私有变量时,只能在其自己的类中直接访问该变量。
以下oracle文档:
本着封装的精神,通常将字段设为私有。这意味着只能从Bicycle类直接访问它们。但是,我们仍然需要访问这些值。可以通过间接添加公共方法来完成,这些方法可以为我们获取字段值。
Oracle文档:Java Access Modifiers
答案 3 :(得分:-1)
在int之前使用static关键字。
静态int速度。
借助static关键字,您无需创建类的对象,就可以像
一样访问它ClassName。变量名称