为何无法访问继承的嵌套类中的getSenderSubID()方法?
以下是几种可能导致你无法访问getSenderSubID()方法的原因及对应解决方式:
混淆了静态嵌套类与实例成员的访问方式
quickfix.fix42.Message.Header是静态嵌套类,它属于Message类本身而非Message的实例。你需要访问的是Message实例中初始化的header对象(Header类的实例)的方法,而非静态嵌套类本身的方法。如果直接通过ExecutionReport实例尝试访问Header类的方法(比如executionReport.Header.getSenderSubID()),这是语法错误。
正确的做法是先获取Message实例中的header对象,再调用其方法:ExecutionReport er = new ExecutionReport(); // 若Message提供了公共的getHeader()方法 er.getHeader().getSenderSubID();header成员变量的访问权限不足
如果Message类中的header成员是private修饰的,即使ExecutionReport是子类且同包,也无法直接访问该变量。此时必须依赖Message类提供的公共访问器方法(比如public Header getHeader())来获取header实例,再调用getSenderSubID()。错误地以静态方式调用实例方法
getSenderSubID()是Header类的实例方法,而非静态方法。如果你的代码尝试通过quickfix.fix42.Message.Header.getSenderSubID()这种类名调用的方式,必然会报错,必须通过Header的实例来调用。类继承或加载的潜在问题
虽然概率较低,但需确认quickfix.fix42.Message.Header确实正确继承了quickfix.Message.Header的getSenderSubID()方法,且该方法在子类中保持public修饰。此外,排查是否存在类加载冲突(比如不同类加载器加载了同名的Header类),导致实际访问的类并非你预期的版本。
内容的提问来源于stack exchange,提问作者avlclimber

