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); } }解释代码并说明结果
时间: 2024-02-15 16:28:52 浏览: 32
这段代码定义了两个类`Cla`和`Clb`,其中`Clb`继承自`Cla`。`Cla`类中定义了一个实例变量`n`,并在构造函数中对其进行初始化,并输出`n`的值。`Clb`类中也定义了一个实例变量`n`,并在构造函数中对其进行初始化,并输出`n`的值。
在`main`方法中,创建了一个`Cla`类型的变量`a`,并将其初始化为`new Clb(5)`。由于`Clb`是`Cla`的子类,因此创建`Clb`对象时会先调用`Cla`类的构造函数,输出`5`。接着会调用`Clb`类的构造函数,并输出`5`。
因此,程序的输出结果为`55`。
相关问题
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); } }
这段代码的输出结果是 `5`。
首先,在 `Cla` 类中定义了一个实例变量 `n`,并在构造方法中输出其值。
然后,在 `Clb` 类中定义了一个实例变量 `n`,并在构造方法中输出 `n` 的值。
在 `main()` 方法中,创建了一个 `Clb` 类的对象 `a`,由于 `Clb` 类继承了 `Cla` 类,因此在创建 `Clb` 对象时,会首先调用 `Cla` 类的构造方法。在 `Cla` 类的构造方法中,输出了 `this.n` 的值,即为 `5`。
因此,最终的输出结果是 `5`。
有如下ClassA和ClassB public class ClassA { public int method(int arg) { return (arg + arg); } } public class ClassB extends ClassA { @Override public int method(int arg) { return (arg * arg); } public static void main(String[] args) { ClassA cla1 = new ClassA(); int guessMe1 = cla1.method(9); System.out.println(guessMe1); ClassA cla2 = new ClassB(); int guessMe2 = cla2.method(9); System.out.println(guessMe2); ClassB cla3 = new ClassB(); int guessMe3 = cla3.method(9); System.out.println(guessMe3); } } 请问guessMe1,guessMe2,guessMe3的值分别为?
在这段代码中:
- ClassA是一个基类,有一个method方法,返回传入参数的两倍;
- ClassB是ClassA的子类,也有一个method方法,覆盖了父类的方法,返回传入参数的平方。
根据Java中的多态性质,在以下代码中:
```
ClassA cla1 = new ClassA();
int guessMe1 = cla1.method(9);
System.out.println(guessMe1);
```
- 先创建ClassA实例,将其引用赋值给cla1;
- 调用cla1的method方法,传入参数9,返回18;
- 打印输出guessMe1的值,为18。
```
ClassA cla2 = new ClassB();
int guessMe2 = cla2.method(9);
System.out.println(guessMe2);
```
- 先创建ClassB实例,将其引用赋值给cla2;
- 因为ClassB是ClassA的子类,所以可以将其引用赋值给ClassA类型的变量;
- 调用cla2的method方法,传入参数9,返回81;
- 打印输出guessMe2的值,为81。
```
ClassB cla3 = new ClassB();
int guessMe3 = cla3.method(9);
System.out.println(guessMe3);
```
- 先创建ClassB实例,将其引用赋值给cla3;
- 调用cla3的method方法,传入参数9,返回81;
- 打印输出guessMe3的值,为81。
所以guessMe1的值为18,guessMe2的值为81,guessMe3的值为81。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)