Java:超类不会覆盖函数

时间:2017-08-07 05:40:44

标签: java superclass override

我一直在玩游戏一段时间,我希望每种类型的Creature都有不同的类别。现在,所有不同生物的AI都在一个长开关中运行,我想要一个超级类,以便为该生物使用该AI。我有这个设置,但它不会覆盖。

我忘记了什么吗?

Bunny.java:

package creature;

import org.newdawn.slick.opengl.Texture;

import creature.Creature;
import creature.CreatureType;
import data.Tile;

public class Bunny extends Creature{

    public Bunny(CreatureType type, float x, float y, float speed1) {
        super(type, x, y, speed1);

    }

    public void AI(int type) {
        System.out.println("test");
    }

}

Creature.java:

public Creature(CreatureType type, float x, float y, float speed1) {
    this.texture = drawImg(type.textureName);
    this.textureHamster = drawImg("creatures/HamsterFace");
    this.healthBackground = drawImg("health_background");
    this.healthForeground = drawImg("health_foreground");
    this.healthBorder = drawImg("health_border");
    this.startTile = startTile;
    this.x = x;
    this.y = y;
    this.intX = (int) x;
    this.intY = (int) y;
    this.width = texture.getImageWidth();
    this.height = texture.getImageHeight();
    this.speed1 = speed1;
    this.speed = speed;
    this.intspeed = speed;
    this.grid = grid;
    this.health = type.health;
    this.inithealth = type.health;
    this.hiddenHealth = health;
    this.startHealth = health;
    this.dir = false;
    this.dchosen = false;
    this.setx = 0;
    this.hurt = 0;
    this.panick = 0;
    this.deathWish = 0;
    this.pdir = -1;
    this.myX = x;
    this.myY = HEIGHT / 2;
    this.right = false;
    this.left = false;
    this.fade = 0;
    this.fir = true;
    this.aiType = type.aiType;
    this.yOffset = 0;
}

.....

public void AI(int type) {
    if(panic > 0)
        panic--;
    hurt();
    speed = speed1;
    switch(type) {

    case 1:
        if(panic > 0) {
            if(pickRandom(150, 300) < 10) {
                direction = !direction;
            }

            if(direction) {
                if(!right) {
                    x += speed;
                } else {
                    if(falling < 2)
                    gravity = 8;
                }
            } else {
                if(!left) {
                    x -= speed;
                } else {
                    if(falling < 2)
                    gravity = 8;
                }
            }

        } else {
            if(getRange(WIDTH / 2, myX) > 200) {
                directionCoolDown++;
                if(directionCoolDown > pickRandom(150, 3000)) {
                    direction = !direction;
                    directionCoolDown = 0;
                }



                if(direction) {
                    if(!right) {
                        x += speed / 3.2;
                    } else {
                        if(falling < 2)
                        gravity = 8;
                    }
                } else {
                    if(!left) {
                        x -= speed / 3.2;
                    } else {
                        if(falling < 2)
                        gravity = 8;
                    }
                }


            } else {
                if(myX < WIDTH / 2) {
                    direction = true;
                } else {
                    direction = false;
                }




            }
        }
        break;

    case 2:

        yOffset = -25;
        if(!angry) {
            pdir = 0;
            if(getRange(Player.getX(), myX) < 300) {
                hamsterFace = true;
            } else {
                hamsterFace = false;
            }

            if(!hamsterFace) {
                directionCoolDown++;
                if(directionCoolDown > pickRandom(150, 3000)) {
                    direction = !direction;
                    directionCoolDown = 0;
                }

                if(direction) {
                    if(!right) {
                        x += speed / 3.2;
                    } else {
                        if(falling < 2)
                        gravity = 8;
                    }
                } else {
                    if(!left) {
                        x -= speed / 3.2;
                    } else {
                        if(falling < 2)
                        gravity = 8;
                    }
                }
            }
        } else {
            pdir++;
            hamsterFace = false;
            if(myX < Player.getX()) {
                direction = true;
            } else {
                direction = false;
            }

            if(direction) {
                if(!right) {
                    x += speed / 1;
                } else {
                    if(falling < 2)
                    gravity = 8;
                }
            } else {
                if(!left) {
                    x -= speed / 1;
                } else {
                    if(falling < 2)
                    gravity = 8;
                }
            }

            if(getRange(myX, Player.getX()) < 5 && getRange(myY, Player.getY()) < 5) {
                hurtPlayer(-2);
                direction = !direction;
                if(direction) {
                    if(!right) {
                        x += speed * 10;
                    } else {
                        if(falling < 2)
                        gravity = 8;
                    }
                } else {
                    if(!left) {
                        x -= speed * 10;
                    } else {
                        if(falling < 2)
                        gravity = 8;
                    }
                }
            }
        }

        if(panic > 1) { 
            angry = true;
        } else { 
            if(pdir > pickRandom(1000,2000)) {
                angry = false;
            }
        }

        break;

    }
}

.....

(两个类都在同一个包中)

编辑:我修正了错字....

1 个答案:

答案 0 :(得分:2)

你在Bunny课上有这个:

public void AI() {
    System.out.println("test");
}

在Creature课程中:

public void AI(int type) {
    if(panic > 0)
    ....

所以

void AI(int type)void AI() NOT 采用相同的方法(检查签名以及它们如何使用不同的参数!)

因此,Bunny类不会覆盖父类

中的任何内容

- 编辑:

现在您的类有一个方法void AI(int type)然后我们可以这么说 Bunny覆盖了Creature AI方法,每当你调用bunny.AI(f)时,你的兔子方法都会被调用!