java 的基类是什么类_关于从基类扩展的类的问题(Java)

我是Java的初学者,试图为我正在编写的游戏编写一个派对任务系统,我有几个问题我想回答.我已经四处走动并问其他人,但他们对Java并不熟悉.

在过去,我尝试制作一堆类并使用多个get方法访问它们.我发现写作非常乏味,并认为我可以在抽象类/实现类下统一它们.因此,代码看起来更像是……

DynastyPQInterface pq = new CustomPQ // or ....

DynastyPQInterface pq = new OtherCustomPQ

当然,这带来了诸如仅能够使用实现的方法之类的困难.它不允许我访问我以后可能想要使用的类的独占方法.

最终,我想要做的是能够使用单个get方法返回任何这些派生类,但仍然保留了普遍使用get方法来调用它们共有的方法的能力,例如execute,创造,结束,同时允许我专门接触他们的独家方法.有办法做到这一点,还是不可能?

如果还不清楚……

我现在编写的代码是一个基类,以这种方式扩展到其他类…

DynastyPQ (base) -> methods include (run(), execute(), end())

CustomAPQ (inherited from DynastyPQ) -> (has exclusive methods like getPoints())

CustomBPQ (inherited from DynastyPQ) -> (has exclusive methods like revivePlayer())

我想写一个get方法,以摆脱多重.我现在拥有的是……

DynastyPQ dynastyPQ;

DynastyPQ getPQ() {

return dynastyPQ;

}

void setPQ(DynastyPQ pq) {

dynastyPQ = pq;

}

这样做……

DynastyPQ pq = new CarnivalPQ();

我只能访问DynastyPQ的方法而不是嘉年华的方法.

有没有办法访问独有的方法,同时普遍能够执行四个基本函数而不考虑类的类型,或者我是否先前错过了什么?

tl; dr – >我想要一个get方法,它通用地返回从类X继承的所有类;但是,我希望能够访问每个类的独占方法.

解决方法:

您可以将对象强制转换为派生类:

DynastyPQ pq = new CustomAPQ();

((CustomAPQ)pq).customAPQmethod();

如果您不知道动态类型是什么(在new运算符之后使用的类型),则可以使用instanceof关键字:

DynastyPQ pq = getPQ();

if (pq instanceof CustomAPQ) {

CustomAPQ a = (CustomAPQ)pq;

a.customAPQmethod();

} else if (pq instanceof CustomBPQ) {

CustomBPQ b = (CustomBPQ)pq;

b.customBPQmethod();

} else {

// Neither a CustomAPQ nor a CustomBPQ.

}

如果您不想这样做,可以使用多态:

class DynastyPQ {

final void run() {

// code.

}

final void execute() {

// code.

}

final void create() {

// code.

}

void specific1() {}

void specific2() {}

}

class CustomAPQ extends DynastyPQ {

@Override

void specific1() {

// do stuff specific to CustomAPQ.

}

@Override

void specific2() {

// do stuff specific to CustomAPQ.

}

}

class CustomBPQ extends DynastyPQ {

@Override

void specific1() {

// do stuff specific to CustomBPQ.

}

@Override

void specific2() {

// do stuff specific to CustomBPQ.

}

}

现在,您可以:

DynastyPQ pq = new CustomAPQ();

pq.specific1();

被调用的方法是CustomAPQ :: specific1().如果未在CustomAPQ中声明specific1(),则它将不执行任何操作.

标签:java,inheritance,interface,abstract

来源: https://codeday.me/bug/20190711/1432476.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值