java 多态 静态方法_java:从具有多态性的未知类调用静态方法

本问题已经有最佳答案,请猛点这里访问。

我有超类Token和一些亚类,如Knight、King、Queen等。

我需要一个随机的Token类型,所以我调用这个方法:

public Class randomTokenType(){

Class[] classes = {

Bishop.class, King.class, Knight.class, Pawn.class, Queen.class, Rook.class

};

Random random = new Random();

return classes[random.nextInt(6)];

}

Class tokenType = randomTokenType();

现在,我想在此tokenType上调用一个静态方法,例如:

tokenType.displayString()

编译器甚至无法解决在Token及其所有子类中实现的这种方法的困难。

我犯了什么错误?

你认为Class班是什么?你为什么这么认为?多态性和EDCOX1,1,在Java中是矛盾的。

另外,请不要为Java代码添加JavaScript代码片段。查看帮助中心,了解如何正确发布代码片段。

我是Java新手。通常我用smalltalk编写代码,其中甚至类都是对象。"类"和"对象"在行为上没有区别

实际上,您的问题可能是一个xy问题,当最佳解决方案是完全使用不同的方法时,您会问"我如何解决此代码问题"。考虑告诉我们你正在努力解决的整体问题,而不是你目前正在努力解决的问题。

您实际上要查找的是反射-请参见使用反射调用静态方法

如果是这样的话:

Method method = tokenType.getMethod("displayString");

method.invoke(null);

类对象是一种索引。它包含允许您查询实际.class文件包含的内容的方法(如方法、字段、注释等)。

您不能直接访问它们(就像索引只指向信息所在的位置,而不是信息本身),而是需要使用class.getmethod("nameofmethod")查询索引。

一旦获得指向方法的"指针",就可以尝试调用它(通过method.invoke)。

根据方法的类型,只需传递invoke方法null(对于静态方法)或对象的实例(对于非静态方法)。

反射还允许您动态创建这样的实例。

更多信息,我建议阅读反思,尤其是课堂上的JavaDoc。这解释了很多。

编辑:只有当方法displayString声明如下时,此操作才有效:

public class Bishop{

public static void displayString() {

System.out.println("Bishop");

}

}

public class Test {

public static void main(String args[]) throws Exception {

Class> tokenType = Bishop.class;

Method method = tokenType.getMethod("displayString");

method.invoke(null);

}

}

如果有参数或者它是私有的,那么这将不起作用。

Already TriedI get an nouchmety exception.和我一起去吧

The question is if the method is public.I just tried it with:Public class Bishop{Public static void displaysting(){system.out.println(Bishop");}

您的代码有很多问题。他们中的少数人是

你在要求一个班级归还一些东西。

public class randomTokenType()//不知道这是什么意思?

如果将static添加到方法定义中,则该方法永远不会被重写。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值