多态的主要的使用场合:3. 使用父类引用做方法的形参,使用子类对象做方法的实参。

package com.sgl.faon.homework;


class Wo {
int m;


Wo() {
add(1);
}


public void add(int i) {
m += i;
System.out.println("Wo"+m);
}


public void print() {
System.out.println(m);
}
}


class No extends Wo {
No() {
add(2);
}


public void add(int i) {
m += i * 2;
System.out.println("No"+m);
}


public void print() {
System.out.println(m);
}
}


public class Try {
public static void add(Wo w) {
w.add(6);
w.print();
}


public static void main(String args[]) {
add(new No());
}

}

运行结果:

多态的主要的使用场合:3. 使用父类引用做方法的形参,使用子类对象做方法的实参。_第1张图片



在new No()时,会先运行父类空参构造方法

1------Wo() {add(1);}
2-------add(int i)--------No子类方法(运行第一遍)此时m=2;
但是由于子类对象会自动向上转型,故在父类空参构造方法运行初始化时,会运行子类No的add(int i)方法。

接着运行子类空参构造方法
No() {add(2);}
3-------No() {add(2);}
4-------add(int i)--------No子类方法(运行第二遍)此时m=6;
然后再运行方法
public static void add(Wo w) {
w.add(6);
w.print();
5--------add(int i)--------No子类方法(运行第三遍)此时m=18;

}

数字为执行顺序:1-2-3-4-5

因为该方法形参为父类Wo w,实参为子类new No()
仅供参考!



你可能感兴趣的:(多态的主要的使用场合:3. 使用父类引用做方法的形参,使用子类对象做方法的实参。)