[说明]
已知类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 () ;
04System. out .println (s. getValue ()) ;
05 System. out .println (s.getSum ()) ;
06
07
08 abstract class SuperClass
09private int i;
10public SuperClass () i= 5;
11public int getValue ()
12 return i;
13
14public final abstract int getSum();
15
16 class SubClass extends SuperClass
17 int j;
18 public SubClass ()
19this (-3);
20
21public 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
参考答案:程序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。