java题,解答,看看能不能帮帮我

代码4为什么是9

img

img

对于多态总结一下
一、使用父类类型的引用指向子类的对象;
二、该引用只能调用父类中定义的方法和变量;
三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中 的这个方法;(动态连接、动态调用)
四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父 类中的变量,那么在编译时会报错。

A a = new B();这是java典型的三大特性之一多态,父类的引用指向子类
父类中的g方法静态方法,虽然子类中也有静态的g方法,但是子类不会重写父类的方法,
所以代码4调用的还是父类中的方法.如果父类和子类的方法都修改成非静态,则子类会重写父类的g方法,则会调用子类的g方法
测试代码如下:


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));

    }
}
class A {
    double f(double x, double y){

        return x+y;
    }
     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;
    }
     int g(int n){
        //int m = A.g(n);
        return n;
    }

}

测试结果:
98.0
3
98.0
3

A a=new B();
new的这个B是类A,调用A里的方法