interface接口是否有父类?
我们都知道所有类的祖先都是Object类,interface接口是否有父类,那么我们可以通过idea插件jclasslib或者在控制台输入 javap -v xxx.class 查看class文件常量
首先我们先看一下普通类的class文件常量
先随便创建两个空的类和接口
public class Person {
}
public class Stu extends Person{
}
public interface IA {
}
public interface IB extends IA {
}
build project后下载了插件可以点击头顶的view
打开Stu.class看到的只有两个
分别是Person类和本身Stu类加上父类Person类里面的Object类一共就是三个
符合祖先类是Object的这个情况
那么我们来看看接口的class文件
我们看到IB接口也是有三个类,分别是IA,IB以及Object,是不是说明Object就是接口基类的父类?其实不是的,是因为Object是接口的引用,任何一个接口都会引用到Object类,所以才会在编译文件里面出现
以下是通过cmd来查看
D:class文件目录>javap -v Stu.class
Classfile
Last modified 2021-11-4; size 242 bytes
MD5 checksum 3bd131f214c194e65cdba5e4d28fc61a
Compiled from "Stu.java"
public class jvm.Stu
minor version: 0
major version: 49
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Methodref #3.#13 // java/lang/Object."<init>":()V
#2 = Class #14 //指向14 // jvm/Stu
#3 = Class #15 //指向15 // java/lang/Object
#4 = Utf8 <init>
#5 = Utf8 ()V
#6 = Utf8 Code
#7 = Utf8 LineNumberTable
#8 = Utf8 LocalVariableTable
#9 = Utf8 this
#10 = Utf8 Ljvm/Stu;
#11 = Utf8 SourceFile
#12 = Utf8 Stu.java
#13 = NameAndType #4:#5 // "<init>":()V
#14 = Utf8 jvm/Stu //Stu全限定名
#15 = Utf8 java/lang/Object //Object全限定名