我发现interface能够直接赋给object:
假设i1是一个interface:IAmNewerObject o1 = i1; //可以通过编译但是,能不能从o1得出一个IAmNewer接口呢?怎么做?
假设i1是一个interface:IAmNewerObject o1 = i1; //可以通过编译但是,能不能从o1得出一个IAmNewer接口呢?怎么做?
解决方案 »
- 关于输入输出流的问题java
- 请问我用JNI技术出现这样的错误是因为什么呢?目录问题可以应该可以排除,因为我在每个目录都给他来一人DLL
- 怎样把一副图片拉伸显示在一个控件中?
- 请问:在JTable中如何禁止移动Column?
- 关于log4j的configuration文件写法???
- java读取oracle的blob字段空指针错误!!!太奇怪了
- 初學JBUILDER,做了一個Application(訪問數据庫的)打包成.JAR,在本地可以用命令行運行,如何發布到其他計算机,需要那些環境?
- 如何设置JToolTip显示为多行?
- 请问如何将一个文本文件一行一行读进一个列表框。我用的是vj++.
- ip地址?
- 怎么将十六进制字符串:0020000000c00012 转换成:0x00 0x20 0x00 0x00 0x00 0xc0 0x00 0x12 .
- 如何输入字符串,并输出
获取基类
package main;public interface IAmNewer {
String getName();
}
//main\IAmNewerImpl.java
package main;public class IAmNewerImpl implements IAmNewer {
private String name = "hello";
public IAmNewerImpl () {
super();
} public String getName()
{
return name;
}
}
//main\Test1.java
package main;import main.*;public class Test1 {
public static void main(String[] args)
{
IAmNewer i = new IAmNewerImpl();
Object o = i;
if (o.getClass().isInstance(i))
System.out.println("yes, o is a IAmNewer."); String name = o.getClass().getSuperclass().getName();
System.out.println("class name is: " + name);
System.out.println("interface name is: " + o.getClass().getInterfaces[0].getName()); //OK
IAmNewer i2 = (IAmNewer) o;
System.out.println("the name is: " + i2.getName());
System.out.println("class name is: " + i2.getClass().getName());
System.out.println("interface name is: " + i2.getClass().getInterfaces[0].getName()); //failured???
/*
compiler error: symbol not found "getInterfaces"
*/
}
}
为什么前面的getClass().getInterfaces[0].getName()可以通过编译而后面的不行?这说明interface又不完全是object?迷惑
都不可能编译通过
正确的代码是:
System.out.println("interface name is: " + o.getClass().getInterfaces()[0].getName()); System.out.println("interface name is: " + i2.getClass().getInterfaces()[0].getName());