コンストラクタと継承について教えてください。以下のようなプログラムを書きました。

A1|public class Oya {
A2|  protected int v1;
A3|  public Oya () {
A4|    v1 = 10;
A5|  }
A6|  public void printValue() {
A7|    System.out.println("v1=" + v1);
A8|  }
A9|}

B1|public class Ko extends Oya {
B2| public Ko () {
B3| }
B4|}

C1|public class Main {
C2|  public static void main(String[] args) {
C3|    Ko ko = new Ko();
C4|    ko.printValue();
C5|  }
C6|}

実行すると v1=10 となるですが、これがよくわかりません。
私は以下のように考えていました。
・Koのスーパークラスの Oya のインスタンス変数v1が、int なので 0 で初期化される
・Oyaの引数なしコンストラクタ内では、v1 に 10 を代入しているが、
 Ko の引数なしコンストラクタが呼ばれていて、Oya の引数なしコンストラクタを
 オーバーライドしているので、v1 は 0 のままのはず
・printValue() では、v1=0 が表示されるはず
サブクラスで引数なしコンストラクタを定義していて、そのなかで super() を書かなくても、スーパークラスの引数なしコンストラクタが呼ばれるのでしょうか?