类实例
父类
1. 为父类的成员变量赋予用户给定值。
2. 默认调用其父类的空构造方法。如果其父类没有空构造方法,必须调用指定的父类构造方法,使用关键字super()
初始化
1. 再初始化子类,为子类的成员变量赋予用户给定值。
2. 调用指定的构造方法。
案例
Adder
public class Adder {
private int radio = 2;
private int value ;
public Adder(int value){
System.out.println("create Adder radio="+radio);
setValue(value);
}
public Adder(int value){
setValue(value);
}
public void setValue(int value) {
System.out.println("setValue radio="+radio);
this.value = value;
}
public int getValue() {
value++;
setValue(value);
System.out.println("a="+value);
return value;
}
}
Multiper
public class Multipler extends Adder{
private double radio = 1.5;
public Multipler(int value) {
super(value);
System.out.println("create Multipler");
System.out.println("Multiple radio="+radio);
}
@Override
public void setValue(int value) {
System.out.println("setValue radio="+radio);
super.setValue((int) (value * 2 * radio));
}
public static void main(String[] args) {
System.out.println( new Multipler(5).getValue());
}
}
输出结果
create Adder radio=2
Multipler setValue radio=0.0
Adder setValue radio=2
create Multipler
Multiple radio=1.5
Multipler setValue radio=1.5
Adder setValue radio=2
a=3
3
解析
父类实例化,第一次打印ratio
由于实例化子类Mutiper必须先实现其父类Adder。故打印Adder 的类成量ratio。打印出2.
第一次调用setValue
value = value * 2*radio
由Adder构造方法调用setValue,由于子类Multiper未实例化它的类变量ratio是默认值0。
导致value 也等于=0.
第二次调用setValue
由于Multiper的setValue方法,调用父类的setValue方法。故打印setValue =2
子类实例化,第二次打印radio
由于父类Adder实例化结束,开始实例化子类Multiper。故打印ratio =1.5。
第三次调用setValue
由于调用了get方法。,调用setValue。 故打印1.5.
第四调用setValue
同样,由于Multiper的setValue方法,调用父类的setValue方法。故打印setValue =2
最终
由于get方法调用了value++; 故value=1;
执行 value*2* radio 所以输出3.