(1)写出程序的运行结果 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)); } } 结果: (2)阅读下面程序,给出程序的(1)、(2)和(3)的输出结果,并进行恰当的说明。 public class Student { private String name; public Student(String na) { name = na; } public String getName() { return name; } public void setName(String na) { name = na; } public static void main(String[] args) { Student s1 = new Student("Tom"); System.out.println(s1.getName()); (1) Student s2 = s1; s2.setName("Bob"); System.out.println(s1.getName()); (2) System.out.println(s2.getName()); (3) } }
时间: 2024-02-14 13:08:19 浏览: 21
(1) 程序的输出结果为:
```
78.0
64
78.0
64
```
(2) 第一行输出结果为Tom,表示对象s1的name属性为Tom。
(3) 第二行输出结果为Bob,表示对象s2的name属性被改为了Bob,因为s1和s2指向同一个对象,所以s1的name属性也被改为了Bob。第三行输出结果也为Bob。
相关问题
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。