在Java中,当要执行一个方法时,首先在对象的真实类(定义对象的真实类型)中搜索它的声明。如果没有找到,则检查超类。如果在那里也找不到,则检查下一个父类,依此类推。但是,请看下面的示例:
   SuperClass s = new SubClass(list of parameter);
   s.someMethodExistOnlyInSubClass();
这会给我一个编译时错误。我认为,如上所述,它会首先查找someMethodExistOnlyInSubClass()at SubClass,验证它是否存在,然后立即执行它。如果我使用该类型的变量SuperClass来引用某些参数的实例,SubClass将SuperClass通过调用转到 的构造函数super(),并且该对象将在那里实例化。在这种情况下,剩下的参数到哪里去了?
通过将对 的实例的引用分配给SubClass类型的变量SuperClass,该变量将被视为引用 的实例SuperClass。因此,它将不知道 中专门声明的任何方法SubClass。但请注意,执行的覆盖SubClass仍然有效。
在您描述的上下文中,要访问someMethodExistOnlyInSubClass()您必须转换s为类型SubClass。往下看:
((SubClass) s).someMethodExistOnlyInSubClass();