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