标签:style class blog code java http
题一,如下代码的执行结果:
class Person{ String name = "No name"; public Person(String nm){name = nm;} } class Employee extends Person{ String empID = "0000"; public Employee(String id){empID = id;} } class EmployeeTest{ public static void main(String[] args){ Employee e = new Employee("4321"); System.out.println(e.empID); } }
题二,如下代码的执行结果:
class Atom{ Atom(){System.out.print("atom ");} } class Rock extends Atom{ Rock(String type){System.out.print(type);} } public class Mountain extends Rock{ Mountain(){ super("granite "); new Rock("granite "); } public static void main(String[] a){new Mountain();} }
题三,对如下代码执行哪些调整,可以使Sub类正常执行:
1. class Super{ 2. private int a; 3. protected Super(int a){this.a = a;} 4. } ... 11. class Sub extends Super{ 12. public Sub(int a){super(a);} 13. public Sub(){this.a = 5;} 14. }
调整选项:
A. Change line 2 to: public int a; B. Change line 2 to: protected int a; C. Change line 13 to: public Sub(){this(5);} D. Change line 13 to: public Sub(){super(5);} E. Change line 13 to: public Sub(){super(a);}
这两道题考察的重点是类的继承,考点是父类构造器的调用。
关于父类构造器的调用需要注意以下几点:
题目分析:题一中Person类没有无参数构造器,子类Employee的构造器中也没有使用super调用Person类中已定义的构造器,那么子类将无法找到无参数的Person类构造器,无法编译。
附上题一编译结果:
根据以上的第五条可以推断出题二的执行结果。
题二执行结果:
对于题三,先分析所给的代码,着重关注Sub类的第二个构造器,这个构造器需要隐式调用父类的无参构造器。父类没有提供无参构造器。因此需要为父类Super添加一个无参构造器,或调整Sub类的第二个构造器,使之调用Super类的有参数的构造器。答案中CD正确,E中调用的父类成员变量a的作用域错误。
标签:style class blog code java http
原文地址:http://www.cnblogs.com/amunote/p/3810273.html