对于下列代码,下列哪个叙述是正确的? class A { public int i=0; A(int m) { i = 1; } } public class B extends A { B(int m) { i = 2; } public static void main(String args[]){ B b = new B(100); System.out.println(b.i); //【代码】 } } A. 程序提示编译错误(原因是A类没有不带参数的构造方法)。 B. 编译无错误,【代码】输出结果是0。 C. 编译无错误,【代码】输出结果是1。 D. 编译无错误,【代码】输出结果是2。
时间: 2024-04-28 13:19:57 浏览: 180
答案是 D. 编译无错误,【代码】输出结果是2。
在这个程序中,类B继承自类A,类A中定义了一个带参构造函数,因此编译器不会自动生成默认的无参构造函数。但是,类B中定义了一个带参构造函数,并且在构造函数中对i进行了赋值。因此,在创建类B的实例时,会调用类B自己的构造函数,而不是从类A继承的构造函数。由于类B的构造函数中对i进行了赋值,因此在输出b.i时,会输出2。
相关问题
对于下列代码,下列哪个叙述是正确的?class Animalf int m; Animal(){ m=100;} Animal(intm){thism=m;}}class Dog extends Animal{ Dog(){ super(8); m+= 10;}}public class E{ public static void main(String args[]){ Dog dog=new Dog(); Systemoutprintln(dog.m);}}
根据给出的代码,正确的叙述是:输出结果为 18。
首先,我们知道 `Dog` 类继承了 `Animal` 类,并且默认会调用 `Animal` 类中的无参构造方法。
在 `Animal` 类中,定义了两个构造方法,其中一个是无参构造方法,另一个是带有一个参数的构造方法,用于初始化 `m` 的值。
在 `Dog` 类中,虽然没有定义构造方法,但是会默认调用父类的无参构造方法。但是,在 `Dog` 类中使用了 `super(8)` 调用了父类的带有一个参数的构造方法,将 `m` 的值初始化为 8。
接下来,在 `Dog` 类中,`m` 的值增加了 10,所以最终输出结果为 18。
这段代码的结果是? Class A{ int x=12; public static void main(String args[]) X++; System.out.println(x); A、编辑错误 B、13 O C、运行错误 O D、12
这段代码存在语法错误,应该加上大括号。同时,x是非静态变量,不能在main方法中直接调用。正确的代码应该是:
```
class A {
int x = 12;
public static void main(String args[]) {
A obj = new A();
obj.x++;
System.out.println(obj.x);
}
}
```
因此,程序输出结果是13,选项B正确。