对以下代码说明正确的是( ) 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
时间: 2024-01-28 07:03:26 浏览: 71
答案是 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 Aclass{ Aclass(int n) { System.out.println("Aclass"); } } class Bclass extends Aclass{ Bclass () { System.out.println("Bclass"); } }
这段代码的错误在于,在类Bclass中没有显式地调用父类Aclass的构造方法。当子类不显式地调用父类的构造方法时,Java编译器会自动在子类的构造方法中加入一句隐式的super()语句,如果父类的构造方法没有无参构造方法,则会编译报错。因此,正确的代码应该是:
```
class Aclass{
Aclass(int n) {
System.out.println("Aclass");
}
}
class Bclass extends Aclass{
Bclass () {
super(0); // 显式调用父类构造方法
System.out.println("Bclass");
}
}
```
挑错题(ABCD注释标注的哪行代码有错误?) class OutClass { int m = 1; static float x; //A class InnerClass { int m =12; //B static float n =20.89f;//C InnerClass(){ } void f() { m = 100; } } void cry() { InnerClass tom = new InnerClass(); //D } }
在给出的代码中,注释标注的行C有错误。
在内部类中,静态成员变量是不允许的。因为内部类是与外部类的实例相关联的,它不能拥有静态成员。所以在行C中,将静态关键字应用于内部类的成员变量n是错误的。
正确的代码应该是:
```java
class OutClass {
int m = 1;
static float x;
class InnerClass {
int m =12;
InnerClass(){
}
void f() {
m = 100;
}
}
void cry() {
InnerClass tom = new InnerClass();
}
}
```
阅读全文