Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自超类字段的Java继承_Java_Inheritance - Fatal编程技术网

来自超类字段的Java继承

来自超类字段的Java继承,java,inheritance,Java,Inheritance,我用Java创建了这两个类,我需要这样定义我的结构: class UnitType { Position myPos; public Position getPosition() { return myPos; } } class Unit extends UnitType { Position myPos; public Unit(Position myPos) { this.myPos = myPos; } }

我用Java创建了这两个类,我需要这样定义我的结构:

class UnitType {
    Position myPos;
    public Position getPosition() {
        return myPos;
    }
}
class Unit extends UnitType {
    Position myPos;
    public Unit(Position myPos) {
        this.myPos = myPos;
    }
}
我的问题是,我能做到以下几点吗

class UnitTest {
    private Unit testUnit;
    @Before
    public void setUp() {
        testUnit = new Unit(new Position(1,0));
    }
    @Test
    public void testPositionUnit() {
        assertEquals("Unit should be placed at (1,0)", new Position(1,0), testUnit.getPosition());
    }
}
如果我能做到这一点,如果我更新了我的单元课的位置,会发生什么。调用getPosition()时是否会看到错误的指针

很多人都想知道我的Position类的.equals方法,所以这里就是:

如果你这样做,你将成为超类
UnitType
myPos
字段。例如:

Unit u = new Unit(new Position(1, 0));
System.out.println(u.myPos);         // (1, 0) assuming toString() was overriden
System.out.println(u.getPosition()); // null
UnitType ut = u;
System.out.println(ut.myPos);        // null
然后,即使您可以更新
Unit
类的
myPos
字段,
getPosition()
也将始终返回
null
,因为它将从从未设置的超类返回
myPos
字段

另外,如果要确定两个
位置
对象是否相同,请确保实现
.equals()
(和
.hashCode()
)。

如果这样做,您将成为超类
单元类型
myPos
字段。例如:

Unit u = new Unit(new Position(1, 0));
System.out.println(u.myPos);         // (1, 0) assuming toString() was overriden
System.out.println(u.getPosition()); // null
UnitType ut = u;
System.out.println(ut.myPos);        // null
然后,即使您可以更新
Unit
类的
myPos
字段,
getPosition()
也将始终返回
null
,因为它将从从未设置的超类返回
myPos
字段


另外,如果要确定两个
Position
对象是否相同,请确保实现
.equals()
(和
.hashCode()
)。

首先,方法
getPosition()
必须返回一些内容。在代码中,它不返回任何内容,因为您已使用返回类型
void

其次,根据您使用的
Position
类(own class?、geometric Position?、…),您可能需要根据您想要实现的目标重写/编写
equals(Object o)
方法


一般来说,
testUnit.getPosition()
new Position(…)
不会返回相同的对象(尽管它们可能包含相同的值),因此断言是错误的。

首先,方法
getPosition()
必须返回一些内容。在代码中,它不返回任何内容,因为您已使用返回类型
void

其次,根据您使用的
Position
类(own class?、geometric Position?、…),您可能需要根据您想要实现的目标重写/编写
equals(Object o)
方法


一般来说,
testUnit.getPosition()
新位置(…)
不会返回相同的对象(尽管它们可能包含相同的值),因此使断言为假。

要确保您看到的位置正确,请通过


然后,要使单元测试正常工作,请确保
位置
类重写
equals(Object)
,以便
assertEquals
将测试等价性,而不是检查它们是否是同一个对象。

要确保查看的位置正确,请通过


然后,为了让单元测试正常工作,请确保
位置
类重写
equals(Object)
,以便
assertEquals
将测试等价性,而不是检查它们是否是同一个对象。

您是否尝试过执行
“以下操作”
?是否尝试过执行
“以下操作”
?我可以传递内部指针吗?就像在超级构造函数中传递myPos并在Unit类中更新一样?然后在超类中,getPosition将指向单元中插入的位置。我可以传递内部指针吗?就像在超级构造函数中传递myPos并在Unit类中更新一样?然后在超类中,getPosition将指向单元中的位置insert。如果我不这样做,我将在单元实例中遇到更新,这将导致指向元素的指针不同。所以UnitType和Unit将有两个不同的myPos内部指针。@miniwolf,没有。只有一个
myPos
字段。好的,但假设我想在UnitType内部而不是在UnitType内部更新此位置。@miniwolf,使字段
受保护
,然后执行
this.myPos=…
如果我执行此技巧,我不会在单元实例中遇到更新,这会导致指向元素的指针不同。所以UnitType和Unit将有两个不同的myPos内部指针。@miniwolf,没有。只有一个
myPos
字段。好吧,但假设我想在UnitType内部而不是在UnitType内部更新此位置。@miniwolf,将字段
设为受保护的
,然后执行
此操作。myPos=…
正是我的问题,因为将值从Unit构造函数解析到Super构造函数最初会给我相同的指针,但之后如果更新出现在Unit.myPos上,则会中断。不完全是这样<代码>新位置(..)
与堆中的
testUnit.getPosition()
不是同一个对象实例。因此,
Object
equals()
方法(很可能会被使用)将返回false。这是我的Position类,.equals()方法应该解决这个问题。这正是我的问题,因为将值从Unit构造函数解析到Super构造函数最初会给我相同的指针,但之后如果更新出现在Unit.myPos上,则会中断。不完全如此<代码>新位置(..)
与堆中的
testUnit.getPosition()
不是同一个对象实例。因此,
Object
equals()
方法(很可能会被使用)将返回false。这是我的Position类,.equals()方法应该解决这个问题。