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); } }详细解读该段代码
时间: 2024-04-04 17:07:01 浏览: 16
该段代码定义了一个A类和一个B类,并在主函数中创建了一个B类的实例对象b。A类中有一个公共方法f(int x, int y),该方法返回两个整数x和y的和。B类继承了A类,并重载了f()方法,提供了一个f(double x, int y)方法,该方法返回一个double类型的数x乘以一个整数y的整数部分。
在主函数中,通过创建一个B类的实例对象b,分别调用了它的f()方法。第一个调用传入了两个整数3和5,根据多态特性,会调用A类中的f(int x, int y)方法,返回8。第二个调用传入了一个double类型的数3.14和一个整数5,由于B类中有一个f(double x, int y)方法,因此会调用该方法,返回15。
最后,将这两个返回值通过printf()方法输出。需要注意的是,输出时使用了中文冒号,应该改为英文冒号。
相关问题
4.下列代码运行的结果是( class A double f(double x,double y) ( return x+y; ] class B extends A t double f(int x,int y) return x*y; ) double f(double x,double y) f return y-x; 〕 public class Test2 public static void main(String args[])( B b=new BO; System.out.println(b.f(5,8)); System.out.println(b.f(8.0,12.0));)
这段代码会输出以下结果:
- 40
- 4.0
解释:
- 第一次调用b.f(5,8)时,会调用B类中的f方法,因为参数是int类型,匹配了B类中的int版本的f方法。所以会输出5*8=40。
- 第二次调用b.f(8.0,12.0)时,会调用A类中的f方法,因为参数是double类型,B类中没有double版本的f方法,所以会调用A类中的double版本的f方法。该方法会返回12.0-8.0=4.0。
请分别写出E类中代码1和代码2的输出结果。 class A{ double f(double x,double y){ return x+y;} } class B extends A{ double f(int x,int y){ return x*y;} } public E{ public static void main(String[] args){ B b=new B(); System.out.println(b.f(3,5));//代码1 System.out.println(b.f(3.0,5.0));//代码2 } }
代码1的输出结果为 15.0,代码2的输出结果为 8.0。
这是因为在类 B 中,方法 f(int x, int y) 重写了超类 A 中的方法 f(double x, double y),方法的重写是根据方法的名称、参数类型以及参数数量来匹配的。当调用 b.f(3, 5) 时,会调用类 B 中的方法 f(int x, int y),因为参数是整数类型,所以返回值为 3 * 5 = 15.0。而调用 b.f(3.0, 5.0) 时,会调用超类 A 中的方法 f(double x, double y),因为参数是浮点数类型,所以返回值为 3.0 + 5.0 = 8.0。