Discuss / Java / 代码结果与预期不一致

代码结果与预期不一致

Topic source
System.out.println(java.io.Closeable.class.getSuperclass()); // AutoCloseable,因为Closeable继承自AutoCloseable

这条命令运行后实际返回的是null,是否是因为AutoClosable是位于java.lang内,而Closable位于java.io内,getSuperclass()方法只搜索包内的范围?

Closeable closeable = () -> {};System.out.println(closeable.getClass().getSuperclass());

然后这样写得到的结果是Object

根据文档,接口调用getSuperclass()只能得到空,因为接口不可能继承自某个具体类。如果要获得AutoClosable,应该是去获得Closable所实现的接口,即:

System.out.println(java.io.Closeable.class.getInterfaces()[0])

三问麻雀

#4 Created at ... [Delete] [Delete and Lock User]

1.Closeable是一个接口,文章中写到:

此外,对所有interfaceClass调用getSuperclass()返回的是null,获取接口的父接口要用getInterfaces()

2.Closeable是一个接口,接口是无法实例化的,所以此时的closeable是Closeable的一个具体的实现类的实例化对象,所以:

System.out.println(closeable.getClass().getSuperclass());

的结果是Object,因为所有的类都默认继承Object

三问麻雀

#5 Created at ... [Delete] [Delete and Lock User]

看来是我引用的那句话修改过


  • 1

Reply