运行结果class A { double f(double x, double y) { return x+y; static int g(int n) { return n *n; } } class B extends A { double f(double x, double y) { double m =super.f(x, y); return m + x* y; } static int g(int n) { intm=A.g(n); return m+n;}} public class e { public static void main(string args[]){ Bb=newB(); System.out.println(b.f(5.0,5.0)); // 【代码1】 System.out.println bq(5);代码24 a = new B(); System.out.println(a.f(10.0,10.0)); // 【代码3】 System.out.println(a.g(5));// 【代码4】
时间: 2024-01-30 19:04:05 浏览: 128
运行结果应该是:
```
30.0
35
110.0
25
```
解析如下:
1. 第一行输出的是 `b.f(5.0,5.0)` 的结果,即先调用父类 A 的 f 方法求和,再加上 x * y,即 5.0 * 5.0 = 25.0,所以结果为 30.0。
2. 第二行输出的是 `B.g(5)` 的结果,即先调用父类 A 的 g 方法计算 n 的平方,再加上 n,即 5 * 5 + 5 = 30,所以结果为 35。
3. 第三行输出的是 `a.f(10.0,10.0)` 的结果,由于 a 是 B 类型的对象,所以会调用 B 类中重写的 f 方法,先调用父类 A 的 f 方法求和,再加上 x * y,即 10.0 + 10.0 = 20.0,再加上 10.0 * 10.0 = 100.0,所以结果为 120.0。
4. 第四行输出的是 `a.g(5)` 的结果,由于 a 是 B 类型的对象,但是调用的是父类 A 中的静态方法 g,所以结果为 5 * 5 = 25。
相关问题
class A i double f(double x,double y)f return x+y; } static int g(int n) i return n* n; } } class B extends A i double f(double x,double y) i double m = super.f(x,y);return m+x* y; } static int g(int n){ int m = A.g(n);return m +n; } }public class E i public static void main(String[ ] args){ Bb = new B(); system.out.print1n(b.f(10.0,8.0));System.out.print1n(b.g( 3)); Aa = new B(); System.out.print1n(a.f(10.0,8.0));System.out.print1n(a.g(3)); } }运行结果
这段代码中有一些错误,我先进行修正:
```
class A {
public double f(double x, double y) {
return x + y;
}
public static int g(int n) {
return n * n;
}
}
class B extends A {
public double f(double x, double y) {
double m = super.f(x, y);
return m + x * y;
}
public static int g(int n) {
int m = A.g(n);
return m + n;
}
}
public class E {
public static void main(String[] args) {
B b = new B();
System.out.println(b.f(10.0, 8.0));
System.out.println(b.g(3));
A a = new B();
System.out.println(a.f(10.0, 8.0));
System.out.println(a.g(3));
}
}
```
修正后,运行结果为:
```
108.0
12
108.0
9
```
解释一下运行结果:
1. `b.f(10.0, 8.0)` 调用的是类 B 中的 `f` 方法,先调用了 A 类中的 `f` 方法求出 `m` 的值,然后返回 `m+x*y`,即 `18+80=108.0`。
2. `b.g(3)` 调用的是类 B 中的 `g` 方法,先调用了 A 类中的 `g` 方法求出 `m` 的值,然后返回 `m+n`,即 `9+3=12`。
3. `a.f(10.0, 8.0)` 调用的是类 B 中的 `f` 方法,因为 `a` 是一个 `A` 类型的变量,但是 `a` 实际上是一个 `B` 类型的对象,所以调用的是 `B` 类中的 `f` 方法。和上面的情况一样,先调用了 A 类中的 `f` 方法求出 `m` 的值,然后返回 `m+x*y`,即 `18+80=108.0`。
4. `a.g(3)` 调用的是类 A 中的 `g` 方法,因为 `g` 是一个静态方法,所以不会根据对象类型来调用方法。直接返回 `n*n`,即 `3*3=9`。
class A { double f (double x, double y) { return x + y; } static int g(int n) { return n * n; } } class B extends A { double f(double x, double y) { double m = super.f(x, y); return m + x * y; } static int g(int n) { int m = A.g(n); return m + n; } } public class E { public static void main(String[] args) { B b = new B(); System.out.println(b.f(6.0,12.0)); System.out.println(b.g(8)); A a = new B(); System.out.println(a.f(6.0,12.0)); System.out.println(a.g(8)); } }运行
这段代码的输出结果是:
```
78.0
64
78.0
64
```
首先,定义了一个类 `A`,其中有一个非静态的方法 `f` 和一个静态的方法 `g`。然后,定义了一个类 `B`,继承自 `A`,并且重写了方法 `f` 和方法 `g`。
在 `B` 中的方法 `f` 中,先调用了 `super.f(x, y)`,即调用父类的 `f` 方法,然后将结果保存在变量 `m` 中,最后返回 `m + x * y` 的值。
在 `B` 中的方法 `g` 中,先调用了 `A.g(n)`,即调用父类的静态方法 `g`,然后将结果保存在变量 `m` 中,最后返回 `m + n` 的值。
在 `main` 方法中,首先创建了一个 `B` 类对象 `b`,然后分别调用了 `b.f(6.0,12.0)` 和 `b.g(8)` 方法,并将结果输出。
接着,创建了一个 `A` 类对象 `a`,但是通过 `new B()` 的方式创建,然后同样分别调用了 `a.f(6.0,12.0)` 和 `a.g(8)` 方法,并将结果输出。需要注意的是,虽然 `a` 的实际类型是 `B`,但是调用的是 `A` 类的方法,因此调用的是 `B` 类重写之前的 `f` 方法和 `A` 类的静态方法 `g`。但是,由于 `B` 类并没有重写 `f` 方法,因此调用的其实还是 `B` 类中的 `f` 方法。最终输出的结果与调用 `b.f` 和 `b.g` 方法时的结果相同。
阅读全文