Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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_Variables_Types - Fatal编程技术网

Java 可以接受不同类型的变量?

Java 可以接受不同类型的变量?,java,variables,types,Java,Variables,Types,TLDR:我需要一个变量,可以从两个类中的任何一个类接收对象 我正在开发一个Java 2D游戏,仍然在使用基础知识,这里我遇到了一个问题:在类Actor中,在构造函数中,Actor生成其hitbox(4xy坐标对象),然后将该hitbox添加到需要检查碰撞的事物列表中 但是现在我已经完成了所有的工作,我创建了一个新的类,平台,这样我的角色就可以在别的东西上行走,而不是在它的敌人被玷污的尸体上。但是在Rect构造函数中,我有一个变量(Parent),它将自身设置为调用构造函数的对象(自身在参数中)

TLDR:我需要一个变量,可以从两个类中的任何一个类接收对象

我正在开发一个Java 2D游戏,仍然在使用基础知识,这里我遇到了一个问题:在类Actor中,在构造函数中,Actor生成其hitbox(4xy坐标对象),然后将该hitbox添加到需要检查碰撞的事物列表中

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

但是,既然平台对象来自另一个类(我不想从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;
    }
}
私有静态无效冲突(Rect r1、Rect r2){
if(r1.y-r2.y=-r2.hgt){
r1.parent.yCol=true;
}否则{
r1.parent.yCol=false;
}
if(r1.x-r2.x=-r2.wdt){
r1.parent.xCol=true;
}否则{
r1.parent.xCol=false;
}
}

您需要使用继承,这是面向对象编程最重要的方面之一。您需要对它进行一些阅读,以便了解它的工作原理和使用方法:

您需要使用继承,这是面向对象编程最重要的方面之一。您需要对它进行一些阅读,以便了解它的工作原理和使用方法:

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

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接口方法的
父对象上调用类方法时,您都需要回溯到原始类型(分别为Actor和Platform)。

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

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
    }
}

像这样的解决方案的问题是,您需要转换回原始类型(分别为Actor和Platform)每次你想在非GameRect接口方法的
父对象上调用类方法时。

你研究过接口吗?污浊的尸体是编程中比较困难的一个方面是的,但据我所知,它允许我创建可供所有实现它的类使用的空方法,使通用getter/setter听起来不错,但我真正需要的是一个可引用的父对象(因此,当我在actor's box或platform box上调用box.parent时,它将返回所述对象,这将使我返回变量类型问题),但可能我没有得到它,我还没有太多的时间阅读所有内容^^。你研究过接口吗?污浊的尸体是编程中比较困难的一个方面是的,但据我所知,它允许我创建所有实现它的类都可以使用的空方法,使通用getter/setter听起来不错,但我真正需要的是一个可引用的父对象(因此,当我在actor's box或platform box上调用box.parent时,它将返回所述对象,这将使我返回变量类型问题),但可能我没有得到它,我还没有太多的时间来阅读所有内容^^。我已经了解了它(还没有完全了解),但我相信如果我这样做,我将不得不让平台扩展Actor,但这样会在每个平台对象上浪费大量信息,不知道这是否会占用计算资源,但可能会使我的工作更加困难^。不,您不必让平台扩展Actor。相反,我会考虑创建一个接口,让他们两个都能实现(可能称之为GameObject?)。我已经了解了这个接口(还没有完全了解),但我相信如果我这样做,我将不得不让Platform extend Actor,但这样会在每个平台对象上浪费大量信息,不知道这是否会占用计算资源,但这可能会使我的工作更加困难。^^。不,你不必让平台扩展演员。取而代之的是为它们创建一个接口来实现(可能称之为GameObject?)。好的,非常感谢,我认为调用类方法不会有问题,因为我会将没有GameRect的项放在不同的类中。再次感谢!您还可以向GameRect接口添加常用方法,如
void setXCol(布尔b)
void setYCol(布尔b)
Ok非常感谢,我认为调用类方法不会有问题,因为我会将没有GameRect的项放在不同的类中。再次感谢!您还可以向GameRect接口添加常用方法,如
void setXCol(布尔b)
void setYCol(布尔b)