gpt4 book ai didi

Java:可能错误的抽象类实现

转载 作者:搜寻专家 更新时间:2023-11-01 01:42:05 25 4
gpt4 key购买 nike

我选择这个标题是因为我注意到我在抽象类的植入上做错了,但我还不太确定是什么。

我出于训练目的创建了 MoveAble 抽象类,并从中创建了 Ball 类。我还为 moveAble 类创建了一个 GetPosition() 方法,并从球类中使用它。但是当我在任何球对象上调用 GetPosition() 时,我得到的是 Moveable Abstract 对象的位置变量。

我猜它应该是那样的,但根据我的理解,我们无论如何都不能使用抽象类,所以我需要能够获得子类的位置值,即使我只在家长类。

注意:我是初学者 java 程序员。可能有更好的方法来做我所做的,但这就是我想出来的。我想听听你们对此有何看法,如果你们认为这一切都是歪曲的,并且有更好的方法来解决所有这些问题,我将很乐意学习。

可移动类:

public abstract class MoveAble {
private int[] position = new int[2];
private int[] velocity = { 1, 1 };

public int[] getPosition() {
return position;
}
public abstract void move(int width, int height) ;

球类:

public class Ball extends MoveAble{

private int[] position = new int[2];
private int[] velocity = { 1, 1 };

public Ball(int x_position, int y_position) {

position[0] = x_position;
position[1] = y_position;
}

@Override
public void move(int width, int height) {
if (position[0] > width - 30 || position[0] < 1) {
velocity[0] *= -1;
}
if (position[1] > height - 30 || position[1] < 1) {
velocity[1] *= -1;
}
position[0] += velocity[0];
position[1] += velocity[1];

}

最佳答案

在提供的代码中,BallMoveAble 的字段positionvelocity were hidden .作为rodit pointed out ,没有必要隐藏您案例中的字段。如果我们从 Ball 中删除字段 positionvelocity,我们会得到预期的结果。

至于为什么为什么程序会这样做:即使我们将字段隐藏在Ball 中,方法public int[] getPosition() 源自 MoveAble,在 MoveAble 中,MoveAble 的字段(及其父类(super class)中的字段)是可见的。

最后一点:MoveAble 比抽象类更能满足接口(interface)的条件。 Here is a discussion about when to use interfaces vs. when to use abstract classes

关于Java:可能错误的抽象类实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31440723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com