我有一个有几个变量的体育基类。我还有几个不同的课程,如排球,足球等,有其他方法和变量。他们看起来有点像这样。如何将派生类传递给接受父类型的函数
public class Sport {
public String commonVar;
public Sport(String c) {
this.commonVar = c;
}
}
然后排球:
public class Volleyball extends Sport {
public String onlyVolleyball;
public Volleyball(String c, String thisVar) {
super(c);
this.onlyVolleyball = thisVar;
}
}
现在我要路过体育的派生类到一个函数在其他地方,但使得参数
public otherFunction(int one, int two, Sport sport) { }
只有对待体育作为运动对象(它会接受派生类,但是我不能访问任何Sport不常见的变量和方法)。我的问题是如何创建一个函数,以便我可以发送所有类型的运动衍生物而不丢失任何数据?
我认为这是我可能寻找的,有没有办法更自动地执行铸造?我可以在运动中设置一个变量,如 'public class <?扩展体育> c;' 并在构造函数中从派生类中设置c。 – Ahorner
@Ahorner实际上,除了具有扩展类型参数的类(例如'ArrayList')之外,您不能动态转换,因为泛型声明确保类型安全。如果你看看它的源代码,你会看到'E'用来表示扩展类型,在'elementData()'方法中,该值被转换为'(E)elementData [index] ',但是这只适用于这种情况,如果他们分享他们所有的方法。 (ArrayList soruce:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java) –
MrLore