Não entendi pq o código compila nesse caso, pensei q a classe B teria que estender a classe A, para passar como parâmetro um objeto do tipo A.
class B { B(A a) {} B() {} }
class C { C(B b) {} C() {} }
class A {
public static void main(String[] args) {
new A(); new B(); new C();
}
}