我有两个类:TeacherCoordinatorCoordinator扩展Teacher

基本上,我想制作一个可以包含Teacher实例或Coordinator实例的实例变量。

我知道仅通过编写Teacher exp = new Teacher()Teacher exp = new Coordinator()即可轻松实现,但是当我这样做时,只有将Teachernew Coordinator()应用于引用变量时,我才能访问new Teacher()方法和属性。是正常的。我的问题是,是否有另一种方式,我仅使用一个可以分配给Teacher或Coordinator对象的实例变量,并使用此变量来调用分配给对象引用变量的对象的任何属性/方法?

最佳答案

您可以检查exp是否为Coordinator,然后进行强制转换并相应地调用其函数:

if(exp instanceof Coordinator) {
    ((Coordinator)exp).foo();
}


如果您要执行几项操作,则可以在本地范围内创建变量并重复使用:

if(exp instanceof Coordinator) {
    Coordinator expCoord = (Coordinator)exp;
    expCoord.foo();
    expCoord.bar();
    expCoord.baz();
}

10-08 00:07