【问题标题】:Issue with casting (possible workaround)投射问题(可能的解决方法)
【发布时间】:2011-10-23 12:50:04
【问题描述】:

好的,我被大学布置了一个作业,但我无法理解这个问题是怎么回事,我是班上唯一能做到这一点的人,而且我的讲师没有回过头来我。

基本上它是关于继承和多态性,我们使用父类,然后从父类创建子类;

private HashMap<String,Aircraft> allAircraft = new HashMap<String,Aircraft>();
Aircraft plane = new Plane(reg,pass,cargo);

所以父母不能使用孩子的方法,我理解这背后的大部分概念并设法理解它。对于其中一种方法,我们特别被要求使用强制转换(尽管我被无数次告知如果我必须使用它,那么我应该重组),但对于另一种方法,我们被要求调用一个只有对于其中两个子类,强制转换在这里不起作用,因为我不知道 HashMap 中的子类是什么。

所以我的问题是;在使用多态性时,我如何偏爱两个子类方法而不是父类?

我的脑子真的要爆炸了。

【问题讨论】:

    标签: java inheritance casting


    【解决方案1】:

    如果你需要向下转型,那么你就不再使用多态了。如果这是老师想要的,那么您仍然可以通过测试对象的实际类型是否合适来以一种安全的方式沮丧:

    if (plane instanceof SubClass1) {
        SubClass1 s = (SubClass1) plane;
        s.someSpecificMethod();
    }
    if (plane instanceof SubClass2) {
        SubClass2 s = (SubClass2) plane;
        s.someSpecificMethod();
    }
    

    如果这个方法对两个子类都是通用的,这可能意味着它们实际上共享相同的接口。所以多态性可以在这里重新发挥作用:

    public interface PassengerTransporter {
        void someSpecificMethodToAllPassengerTransporters();
    }
    
    public class SubClass1 implements PassengerTransporter {
        void someSpecificMethodToAllPassengerTransporters() {
            // TODO : implement this
        }
    }
    
    public class SubClass2 implements PassengerTransporter {
        void someSpecificMethodToAllPassengerTransporters() {
            // TODO : implement this
        }
    }
    
    if (plane instanceof PassengerTransporter) {
        PassengerTransporter p = (PassengerTransporter) plane;
        p.someSpecificMethodToAllPassengerTransporters();
    }
    

    【讨论】:

    • 完美,我知道一定有办法调节它。干杯芽!
    【解决方案2】:

    如果此时您无法更改基础/派生层次结构,请查看 instanceof 运算符。

    【讨论】:

      【解决方案3】:

      您可以使用getClass() 方法找出对象的确切类,或者您可以使用instanceof 运算符询问对象是否属于特定类型。不管怎样,向一个对象询问它的​​特定类并不优雅,但在某些情况下你别无选择。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-11
        • 1970-01-01
        • 1970-01-01
        • 2014-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多