填空题
[说明] 已知类SubClass的getSum方法返回其父类成员i与类SubClass成员j的和,类SuperClass中的getSum为抽象函数,程序中的第14行有错误,请修改该错误并给出修改后的完整结果,然后完善程序中的空缺,当程序运行到第22行且尚未执行第22行语句时成员变量i的值,最后给出程序运行后的输出结果。 [Java代码] 行号 代码 01 public class Mainjava 02 public static void main(String[] args) 03 SuperClass s = new SubClass () ; 04 System. out .println (s. getValue ()) ; 05 System. out .println (s.getSum ()) ; 06 07 08 abstract class SuperClass 09 private int i; 10 public SuperClass () i= 5; 11 public int getValue () 12 return i; 13 14 public final abstract int getSum(); 15 16 class SubClass extends SuperClass 17 int j; 18 public SubClass () 19 this (-3); 20 21 public SubClass (int j) 22 (1) .j=j; 23 24 public int getValue () return j; 25 public int getSum() 26 return (2) . getValue() + j; 27 28
1、
【正确答案】
1、{{*HTML*}}程序14行的错误改为:public abstract int getSum(); (1) this (2) super 程序22行未执行前成员变量i的值为5。 程序运行结果为-3,2。
【答案解析】[解析] 本题考查的是用Java程序编程。 程序14行中定义了公有抽象方法getSum(),而抽象方法就是用来继承的,以实现多态,不能定义为final,故应改为“public abstract int getSum()”。 Java中对自身的引用为this,而函数中的局部变量会屏蔽外部变量,故空(1)处应填this。SubClass的getSum方法是返回其父类成员i与类SubClass成员j的和,而对父类的引用为super,故空(2)应填super。 继承类的初始化顺序是先初始化基类再初始化继承类。程序22行的首次调用是通过SubClass类的默认构造函数中的调用this(-3),而此时基类已通过默认构造函数构造,故基类的变量i的值为50初始化完成后,i的值为5,j的值为-3,故getSum()方法应返回2。所以,程序运行结果为:-3, 2。