存在父类时对象的实例化先编译父类;
如果子类没有实现父类的接口,属于语法错误,无法通过编译;
子类没有实现父类的接口是子类的错,父类没有错,即使不存在子类,父类也是可以编译得过的。
你的答案应该选B:
但是,实际编译是这样:
如果你直接javac Square.java,语法检查未通过,编译器将不工作;而正确编译时将得到父类与子类的class文件。
如果你先javac Shape.java,将得到Shape.class,再执行javac Square.java(未实现接口的)时,你仍将只会看到Shape.class。
这个可以详细解答:
1、在 jdk 1.5 及以前版本,是要先编译父类再编译子类,不然编译子类时找不到所要的父类
2、在 jdk 1.6 中可以直接编译子类,其需要的父类会在当前目录及环境变量指定的位置查找,并进行编译
编译器先编译的是Shape..
Square没有没有实现父类Shape的方法draw, 是连语义检查都过不了的,可以理解为都没有到编译的真正阶段。