java实用教程(第五版)习题第五章 三(3)

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(10.0,8.0));    //【代码1】
        System.out.println(b.g(3));    //【代码2】
        A a = new B();
        System.out.println(a.f(10.0,8.0));    //【代码3】
        System.out.println(a.g(3));    //【代码4】
    }
}
【代码1】:98.0 。 【代码2】:12 。【代码3】:98.0 。 【代码4】:9 
代码1调用b对象的f方法,b对象是B类实例化的,调用的是B类自己的f方法,传入10.0和8.0后,用super关键字调用了父类的f方法,得到18.0赋值给m,最后返回18.0+10.0*8.0也就是98.0。 
【代码2】调用B类中的静态方法g传入3,方法内又去调用父类中的g方法传入3,得到9赋值给m后,输出9+3也就是12。 
【代码3】a对象是上转型对象,上转型对象可以调用重写父类的方法以及父类派生的方法,所以a调用的f方法是它重写的方法,那么具体过程就跟【代码1】相同,答案为98.0 
【代码4】在于g方法是静态方法,静态方法是不允许被重写的,所以B类中的g方法相当于该类特有的方法,那么a调用的g方法实际上是父类的,输出结果为9 。

猜你喜欢

转载自blog.csdn.net/qlu_minoz/article/details/80466322