尝试了解如何在列表作为超类键入时访问子类的方法。这应该是基本的多态性,但我感到困惑。
public class super
{
public Boolean isSuper()
{
return true;
}
}
public class sub : super
{
public Boolean isSuper()
{
return false;
}
}
现在我列出这些对象
List <super> myList = new List<super>();
myList.Add(new super());
myList.Add(new sub());
现在我尝试让列表中的每个对象查询自己以查看它是超类还是子类
foreach(super objInList in myList)
{
if(objInList.isSuper())
Debug.Print("Super");
else
Debug.Print("Sub");
}
所以会发生的事情是,由于每个对象都被强制转换为超类,它使用isSuper()的超类方法,并且它总是以超类的形式响应。
我想访问子类' isSuper(),而不必在循环的每次迭代中使用 instanceof 。显然,如果您可以查询对象以查看它是超级还是子级,那么O / S中的某些内容就知道了对象的类型。为什么要通过猜测游戏来检查每种可能性?为什么不让它深入到适当的子类并执行适当的方法?有没有办法实现这个目标?
答案 0 :(得分:9)
您必须在super
课程中使用override sub
类属性才能获得所需的行为。
相应地更改您的班级定义:
public class super
{
public virtual Boolean isSuper()
{
return true;
}
}
public class sub : super
{
public override Boolean isSuper()
{
return false;
}
}