0

我有以下基类

public class Car
{
   public static int getWheelsCount()
   {
       return 4;
   }
}

然后我有一些使用自定义方法从它扩展而来的子类,例如Honda extends Car,Mercedes extends Car等。

在一个单独的方法中,我只是希望能够接收 的特定子子项Car,或者作为泛型或者Honda.CLASS调用getWheelsCount()它的方法。像这样的东西:

public void doSomething<T extends Car>()
{
    int wheels = T.getWheelsCount();
}

或者:

public void doSomething(Car myCar.CLASS)
{
    int wheels = myCar.getWheelsCount();
}

我可以这样调用这个函数:

doSomething<Honda>();
doSomething<Mercedes>();

或者:

doSomething(Honda.CLASS);
doSomething(Mercedes.CLASS);

等等

有什么想法可以在这里完成我想要的吗?

4

2 回答 2

3

由于静态方法是在 上声明的Car,所以总是调用:

Car.getWheelsCount();

显然,您并不是说该方法是静态的,而是希望它是常规方法,并让每辆车独立给出答案....所以,从方法声明中删除“静态”,并让每个汽车子类覆盖该方法....然后为每辆汽车调用实例方法。

于 2013-05-11T03:27:34.430 回答
1

在 Java 中,静态方法不能被覆盖。这主要是因为 Java 类本身不是对象,这与诸如 Objective-C 之类的语言不同。Java 类对象(的实例java.lang.Class)是完全不同的东西,它们只是 Java 有点老套的反射系统的一部分。

尽管在不了解您的目的的情况下很难给出很多建议,但由于此限制,我建议您尝试尽可能地从 Java 类中消除静态功能,除非所讨论的方法是实用程序或辅助方法。尝试重构代码以传递实例而不是类。

有了关于目标的更多信息,而不是关于您在实施特定解决方案时遇到的问题的纯粹信息,可能更容易给出更具体和全面的答案。

于 2013-05-11T04:55:05.507 回答