Here's a class hierarchy:
class SuperClass {
public A method1() {
return new A();
}
public B method2() {
return new B();
}
}
class SubClass1 extends SuperClass {
@Override
public C method1() {
return new C();
}
}
class SubClass2 extends SubClass1 {
@Override
public B method1() {
return new B();
}
@Override
public D method2() {
return new D();
}
}
Repair the hierarchy of A, B, C, D according to the covariant return types principle.