lpirate4
2015-10-25 02:31
采纳率: 50%
浏览 1.6k
已采纳

java代码问题,新手求解。

class A {
int i;

A() {
    add(1);
}

void add(int v) {
    i = i + v;
}

void print() {
    System.out.println(i);
}

}

class AA extends A {
AA() {
add(2);
}

void add(int v) {
    i = i + v * 2;
}

}

public class Test2 {

public static void main(String[] args) {
    // TODO 自动生成的方法存根
    show(new AA());
}

static void show(A b) {
    b.add(8);
    b.print();
}

}
运行结果为22.
能详细解释一下show方法是什么意思吗?
谢谢大家的回答。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • krvscn 2015-10-25 03:40
    已采纳
        主函数中有个show()方法,show()方法上面有个方法调用,show()方法中有两个字母但其实是一个参数类型--A类的成员b  即A b=new A();只是没有实例化即没有new A(),从而作为一个参数类型。
    

    而上面的调用show()方法---show(new AA()) 代表传入了一个实例化对象进入show()方法中。它的作用是将对这个传入的实例化对象进行add(8)和print()操作**

    已采纳该答案
    打赏 评论
  • yuanwang886 2015-10-25 03:05

    静态方法,子类,父类的关系

    打赏 评论
  • guwei4037 2015-10-25 03:31

    show(A b) 方法需要一个A,而传入的是A的子类AA对象,因此会先调用A的构造函数,再调用AA的构造函数。

    计算过程如下:
    1、AA中的i为2 AA中的v为1。调用了A的构造函数。
    2、AA中的i为6 AA中的v为2。调用了AA的构造函数。
    3、AA中的i为22 AA中的v为8,i=i+v*2 ,也就是i = 6+8*2 = 22
    4、输出结果:22

    打赏 评论
  • krvscn 2015-10-25 03:40
        主函数中有个show()方法,show()方法上面有个方法调用,show()方法中有两个字母但其实是一个参数类型--A类的成员b  即A b=new A();只是没有实例化即没有new A(),从而作为一个参数类型。
    

    而上面的调用show()方法---show(new AA()) 代表传入了一个实例化对象进入show()方法中。它的作用是将对这个传入的实例化对象进行add(8)和print()操作**

    打赏 评论
  • 言午言若 2015-10-25 03:47

    java采用运行时绑定,将子类对象赋值给父类,调用的依然是子类的方法。

    打赏 评论
  • havedream_one 2015-10-25 04:56
     class A {
        int i;
        A() {
            System.out.println("初始化A:");
            System.out.println(this);
            //调用父类add还是子类add,关键在于调用对象是父类还是子类,重点在于this是什么对象
            add(1);
            System.out.println("A:i----->" + i);
        }
    
        void add(int v) {
            System.out.println("调用A:add();");
            i = i + v;
        }
    
        void print() {
            System.out.println(i);
        }
        public String toString(){
            return "当前对象类型:A";
        }
    }
    class AA extends A {
        AA() {
            System.out.println("初始化AA:");
            add(2);
            System.out.println("AA:i----->" + i);
        }
        void add(int v) {
            System.out.println("调用AA:add();");
            i = i + v * 2;
        }
        public String toString(){
            return "当前对象类型:AA";
        }
    }
    public class TestFunction {
        public static void main(String[] args) {
            // TODO 自动生成的方法存根
            show(new AA());
        }
    
        static void show(A b) {
            b.add(8);
            b.print();
        }
    }
    
    打赏 评论
  • havedream_one 2015-10-25 04:57

    你可以编译运行下上述代码,就可以看到执行顺序,其实重点在于this是谁

    打赏 评论

相关推荐 更多相似问题