有如下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的值分别为?
时间: 2024-01-13 14:03:24 浏览: 58
在这段代码中:
- 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。
阅读全文