java 抽象 变量_java-我可以在抽象类中更改变量的类吗

在我当前的项目中,我有几个类从抽象类继承变量.相似之处之一是,它们都需要根据抽象类的扩展来计算新的特定控制器类.这些类也有许多相似之处,其中之一是它们保存了构造它们的对象.

现在,我试图为这些控制器类创建一个抽象类,并且为该抽象类创建了一个变量来创建它们.现在的问题是,我需要我的控制器类的实现才能将抽象创建者类更改为控制器类的实现

这听起来真令人困惑.我将写下一个示例:

public abstract class ObjectController {

protected GameObject gameObject;

protected Game gameVersion;

public ObjectController(GameObject object, Game gameVersion){

this.gameObject = object;

this.gameVersion = gameVersion;

}

public abstract void nextAction();

}

这就是我的抽象Controller类,我将写下扩展该类的Controller类的示例.此类需要保存一个扩展抽象GameObject类的对象.虽然,由于我非常确定在构造此类之后,’gameObject’变量会填充有GameObject的特定扩展名,所以我想使用只有该扩展名才能执行的该变量来完成操作.

public class PlayerController extends ObjectController {

int speed = 0;

public PlayerController(Player player, Game gameVersion{

super(player, gameVersion)

}

public void updateSpeed(){

speed = player.getSpeed() // example of a method only the Player class has

}

}

如何在不将player变量不断转换为Player类的情况下执行此操作?

解决方法:

如果您的所有Controller都遇到此问题,建议您使用通用的:

abstract class ObjectController {

protected T gameObject;

protected Game gameVersion;

public ObjectController(T object, Game gameVersion){

this.gameObject = object;

this.gameVersion = gameVersion;

}

public abstract void nextAction();

}

class PlayerController extends ObjectController {

public PlayerController(Player object, Game gameVersion) {

super(object, gameVersion);

}

@Override

public void nextAction() {

//Work with your Player here

}

}

当您制作一个扩展ObjectController的控制器时,您将强制超类的T gameObject符合某些类型,即GameObject的实例.这样,泛型超类中对T的任何提及都将成为您要使用的类型.

编辑:如果要引用GameObject的ObjectController:

public class GameObject {

private ObjectController extends GameObject> controller;

//Getter/setter for controller

}

如果愿意,您甚至可以在GameObject的构造函数中实例化控制器.

通配符?或多或少地告诉编译器,该泛型将在运行时“属于GameObject的某些类instanceof”.如果您在编码时意识到类的类型,通配符可能会有点难工作,但是由于您知道每个控制器的通用类型都是GameObject的类的通用类型,因此您应该能够通过object.getController( ).

标签:casting,inheritance,java,class,abstract

来源: https://codeday.me/bug/20191026/1938340.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值