注释以下代码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 a { 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)); } }
时间: 2024-02-14 07:08:21 浏览: 159
这段代码定义了两个类A和B,B是A的子类。A中有一个f方法和一个静态的g方法,B继承了A的f方法并重写了它,同时也重写了静态的g方法。
在主类a中,首先创建了一个B对象b,并调用了它的f方法和g方法,分别输出了b.f(6.0,12.0)和b.g(8)的结果。
然后又创建了一个A对象a,并将它指向了一个B对象,再调用a的f方法和g方法,分别输出了a.f(6.0,12.0)和a.g(8)的结果。因为a是A类型的引用,所以调用的f方法是A中的方法,但因为a指向的对象是B对象,所以实际执行的是B中重写后的f方法。而对于静态方法g,无论是用B对象还是A对象来调用,都只会执行A中的静态方法g。
相关问题
给出下列【代码】注释标注的代码的输出结果。 class A { int f(int x,int y) { return x+y; } } class B extends A { int f(double x,int y) { return (int)x*y; } } public class E { public static void main(String args[]) { B b=new B(); int m = b.f(3,5); int n = b.f(3.14,5); System.out.printf("%d:%d",m,n); //【代码】 } }
在上述代码中,输出结果为 `8:15`。
下面是代码的详细解释:
1. 首先,我们定义了一个 `A` 类,并在其中声明了一个名为 `f` 的方法,该方法将两个整数相加,并返回它们的和。
2. 接着,我们定义了一个名为 `B` 的子类,它继承了 `A` 类。在 `B` 类中,我们定义了一个名为 `f` 的方法,该方法接受一个双精度浮点型参数和一个整型参数,并将这两个参数相乘,然后将结果转换成整数并返回。
3. 在 `main` 方法中,我们创建了一个 `B` 的实例 `b`。然后,我们分别调用了 `b` 的 `f` 方法,并将其返回值赋值给了两个整型变量 `m` 和 `n`。具体来说,我们第一次调用 `b.f(3, 5)`,该方法将返回 `3 + 5 = 8`,我们将其赋值给 `m`;第二次调用 `b.f(3.14, 5)`,该方法将返回 `3.14 * 5 = 15.7`,我们将其转换成整数 `15` 后赋值给 `n`。
4. 最后,我们使用 `System.out.printf` 方法输出了 `m` 和 `n` 的值,结果为 `8:15`。
有以下源程序,分别在不同的包中,请写出程序运行结果: package dir1; public class A{ public int i=1; private int j=2; protected static int k=6; public A(int i, int j){ i=i; this.j=j; } public float f(int x,int y) { return x+y+j; } protected double g(int i){ return this.i+i; } public int h(int n) { k+=n; return k; } } package dir2; import dir1.A; class B extends A{ int i=3; public B(){ super(3,4); } public double g(int m){ return super.g(m)+i; } public float f(int x,int y) { return x+y; } } public class Test{ public static void main(String[] args) { A a = new A(5,6); B b1=new B(); System.out.println(b1.g(2)); System.out.println(b1.h(3)); a=b1; System.out.println(a.f(1, 2)); B b2=new B(); System.out.println(b2.h(3)); } }
程序运行结果为:
10.0
3
2.0
3
注释:
- 第1次输出为 b1.g(2),b1 是 B 的实例化对象,调用 g 方法,输出的是 2 * 1 + 3 = 5.0。
- 第2次输出为 b1.h(3),b1 是 B 的实例化对象,使用了 A 中的 h 方法,将 j 的值赋为 3,然后返回 k 的值,即 3。
- 第3次输出为 a.f(1, 2),a 是 A 类型的变量,但是其实际指向的是 B 的实例化对象 b1,调用 f 方法,输出的是 1 * 2 = 2.0。
- 第4次输出为 b2.h(3),b2 是 B 的实例化对象,使用了 A 中的 h 方法,将 k 的值赋为 3,然后返回 k 的值,即 3。
阅读全文