java - 类型转换为父类(super class)并调用重写方法是否可以接受? ( java )

标签 java types casting overriding super

它似乎有效,但它被认为是“好的”编程吗?

这里有一个例子来说明:

public class foo{
   foomethod(){do something};
}

public class foo1 extends foo{
    @override foomethod(){do something};
}

public class foo2 extends foo{
    @override foomethod(){do something};
}

ArrayList x /*with foo1 and foo2 objects*/
for (Object o : x){((foo)o).foomethod();}

这被认为是“好的”编程吗?如果不是,什么是一个不错的紧凑替代方案? (如果可能的话,除了 switch(o.getClass()) 之外)

编辑,因为我似乎不太擅长澄清:)

我的意思是调用已被重写的方法而不是 super 方法。 我想做的另一种方法是:

ArrayList x/* 再次使用 foo1 和 foo2 对象*/

for (Object o : x){
    switch(o.getClass()){
        case foo1.class:
            ((foo1)o).foomethod();
            break;
        case foo2.class:
            ((foo1)o).foomethod();
            break;
    }
}

但我想避免使用 switch 语句,因为它会使代码变得更大、更复杂。

最佳答案

它是否被认为可以接受完全不是重点。真正的问题是它并没有像你想象的那样做。它不会“调用重写的方法”。派生类的方法仍然被调用。如果要调用重写的方法,则必须在派生类中使用 super 关键字。

关于java - 类型转换为父类(super class)并调用重写方法是否可以接受? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13897430/

相关文章:

java - 花哨的时间格式化程序显示 "5 min ago", "yesterday"等

c++ - 通过基类指针获取子类类型

java - c# upcasting 总是被允许的

C# 内联检查语句不起作用

c - c程序需要解释

java - 尝试在多个实例上运行批处理作业时出现 DuplicateKey 异常

java - 尝试通过 Hibernate 连接到 Oracle 时出现 java.lang.NoSuchMethodError

java - openjdk 平台二进制文件在构建 android 应用程序时使用了太多内存

c - 指针赋值错误 C

parsing - 使用 "go/parser"检查表达式是否为自定义类型