对以下代码说明错误的是( ) class Aclass{ Aclass(int n) { System.out.println("Aclass"); } } class Bclass extends Aclass{ Bclass () { System.out.println("Bclass"); } }
时间: 2024-01-31 20:02:21 浏览: 24
这段代码的错误在于,在类Bclass中没有显式地调用父类Aclass的构造方法。当子类不显式地调用父类的构造方法时,Java编译器会自动在子类的构造方法中加入一句隐式的super()语句,如果父类的构造方法没有无参构造方法,则会编译报错。因此,正确的代码应该是:
```
class Aclass{
Aclass(int n) {
System.out.println("Aclass");
}
}
class Bclass extends Aclass{
Bclass () {
super(0); // 显式调用父类构造方法
System.out.println("Bclass");
}
}
```
相关问题
对以下代码说明正确的是( ) class Aclass{ int n = 0; Aclass () { n = 'a'; //97 System.out.print("Aclass "); } } class Bclass extends Aclass{ int n = 'b'; //98 Bclass () { System.out.print("Bclass "); } } public class Main{ public static void main(String[] args) { Aclass b = new Bclass(); System.out.print(b.n); } } A. 输出结果为:Bclass Aclass 97 B. 输出结果为:Aclass Bclass 98 C. 子类可以通过super.n的方式访问基类的n。 D. 输出结果为:Aclass Bclass 97
答案是 A。
创建 Bclass 的实例时,它的构造函数会先调用 Aclass 的构造函数,然后才执行 Bclass 的构造函数。因此,先输出 "Aclass ",然后才输出 "Bclass "。
由于子类 Bclass 中定义了一个与基类 Aclass 同名的成员变量 n,因此在子类中访问 n 时,会访问子类中的 n,而不是基类中的 n。因此,子类 Bclass 中的 n 值为 'b' 的 ASCII 码值 98。
在 main 方法中,创建了一个 Aclass 类型的 b 变量,并将其初始化为一个 Bclass 的实例。由于 b 是 Aclass 类型的,因此只能访问 Aclass 中的成员变量 n,而不是 Bclass 中的成员变量 n。因此,输出值为 97。
class Cla{ int n = 1; Cla(int n){ this.n = n; System.out.print(this.n); } } class Clb extends Cla{ int n = 2; Clb(int n) { this.n = n; System.out.print(n); } public static void main(String[] args) { Cla a = new Clb(5); } }解释代码并说明结果
这段代码定义了两个类`Cla`和`Clb`,其中`Clb`继承自`Cla`。`Cla`类中定义了一个实例变量`n`,并在构造函数中对其进行初始化,并输出`n`的值。`Clb`类中也定义了一个实例变量`n`,并在构造函数中对其进行初始化,并输出`n`的值。
在`main`方法中,创建了一个`Cla`类型的变量`a`,并将其初始化为`new Clb(5)`。由于`Clb`是`Cla`的子类,因此创建`Clb`对象时会先调用`Cla`类的构造函数,输出`5`。接着会调用`Clb`类的构造函数,并输出`5`。
因此,程序的输出结果为`55`。