一个可以采用不同类型的变量?

时间:2017-09-22 20:03:11

标签: java variables types

TLDR:我需要一个可以从2个类中接收对象的变量。

我正在开发一个Java 2D游戏,仍然有基础工作,这里我有一个问题:在类Actor中,在构造函数中,actor生成其hitbox(4个XY坐标对象)然后将该hitbox添加到需要检查冲突的事物列表中。

但是现在我已经完成了所有这些工作,我创建了一个新课程,平台,这样我的角色就​​可以在其他东西上行走,而不是玷污它的敌人。但是在Rect构造函数中,我有一个变量(Parent),它将自己设置为调用构造函数的对象(在参数中使用自身),所以我会得到hitbox.parent()= player。

但是由于Platform对象来自另一个类(我不想从Actor类继承),我怎样才能使它成为Rect并给自己一个不同类型的父类?

修改

现在的课程

package misc;

import item.Platform;
import npc.Actor;

public class Rect {
int x,y,wdt,hgt;

public Rect(Actor a){
    x = a.x;
    y = a.y;
    wdt = a.wdt;
    hgt = a.hgt;        
}
public Rect(Platform p){
    parent = p;
    x =p.x;
    y =p.y;
    wdt =p.wdt;
    hgt =p.hgt;
}
}

这里是我无法调用它的地方

private static void collision(Rect r1,Rect r2){

    if (r1.y -r2.y <= r2.hgt && r1.y -r2.y >= -r2.hgt){
        r1.parent.yCol = true;  
    }else{
        r1.parent.yCol = false;
    }

    if (r1.x -r2.x <= r2.wdt && r1.x -r2.x >= -r2.wdt){
        r1.parent.xCol = true;  
    }else{
        r1.parent.xCol = false;
    }
}

2 个答案:

答案 0 :(得分:1)

您需要使用继承,这是面向对象编程的最重要方面之一。您需要对其进行一些阅读,以便了解它的工作原理以及如何使用它:https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

答案 1 :(得分:1)

除了继承之外,您还可以使用基于接口的方法。

public interface GameRect {
  int getX();
  int getY();
  int getHeight();
  int getWidth();
}

public class Actor implements GameRect {
  // implementation
}

public class Platform implements GameRect {
  // implementation
}

public class Rect {
    // implementation
    private GameRect parent;

    // constructor works for all classes that implement GameRect interface
    public Rect(GameRect gr) {
      parent = gr;
      x = gr.getX();
      y = gr.getY();
      // etc
    }
}

像这样的解决方案的问题是,每次要调用非GameRect接口方法的parent对象上的类方法时,需要回退到原始类型(Actor和Platform)