接口:
public interface InterfaceA {
public void PartOfIinterfaceA();
}
类别:
public class Class_To_Test_Interface_encapsulation implements InterfaceA {
public void MethodM() {
}
@Override
public void PartOfIinterfaceA() {
// TODO Auto-generated method stub
}
}
主要课程:
public class MainClass {
public static void main(String args[]) {
InterfaceA Ia = new Class_To_Test_Interface_encapsulation();
Ia.MethodM();
}
}
它给了我以下错误: 在InterfaceA()类型中未定义方法MethodM() 我很清楚,为什么它给我错误和它的逻辑。 另外,我重新评估了// Use methods declared in implementation that are not defined in interface
但是,我的问题是,我们还有其他任何方式,其中一段代码引用了B的实例 (使用InterfaceA类型)实际上可以访问m?
答案 0 :(得分:2)
在没有m的对象(InterfaceA)上访问m没有意义(该方法未在接口中定义)。如果您知道InterfaceA的一个子集将定义m,则需要在访问m之前确定该子集中的成员资格:
if (Ia instanceof Class_To_Test_interface_encapsulation) {
((Class_To_Test_interface_encapsulation)Ia).MethodM();
}
答案 1 :(得分:-1)
InterfaceA Ia = new Class_To_Test_Interface_encapsulation()。MethodM();
这将跳过编译时错误,并在运行时正确解析并调用方法MethodM()