java 父类构造器和类变量

类实例

父类

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.

你可能感兴趣的:(java,开发语言)