如何解决在这种情况下,编译器为什么不能解析实例方法的符号?
假设一个类MyClass实现了一个接口MyInterface,并且它有自己的实例方法,例如foo()。 当我创建这样的MyClass实例时:
MyInterface myClass = new MyClass();
在没有显式强制转换的情况下,编译器不允许我访问其实例方法:
myClass.foo(); // Can't resolve symbol
((MyClass) myClass).foo(); // this is okay
即使编译器显然知道myClass是MyClass的实例:
if(myClass instanceof MyClass)
System.out.println(myClass.getClass().getName()); //this will print "MyClass"
为什么我需要使用强制转换的编译器来允许我访问实例方法?
解决方法
第MyInterface myClass = new MyClass()
行的含义为,“创建一个新的MyClass
,然后忽略其所有功能,但在接口MyInterface
中定义的功能除外。”
当您提到“编译器显然知道myClass是MyClass的实例”时,您实际上并不正确:不是 知道编译器,而是运行时。 / em>告诉编译器忘记了这些信息,确实如此。
,它的类型可能为MyClass
,但是您将其视为MyInterface
。当您执行A myVar = new B();
时,即使A
的类型为myVar
,也只能访问B
中可以访问的任何内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。