
class Generics10_4ClassB<T extends int> {
    T field;

    Generics10_4ClassB(T value) {
        self.field = value;
    }

    T get_field() {
        return self.field;
    }

    virtual T get_field2() {
        return new T();
    }
}

class Generics10_4ClassC extends Generics10_4ClassB<int> {
    int field2;

    Generics10_4ClassC(int value, int value2) {
        super(value);

        self.field2 = value2;
    }

    int get_field() {
        return self.field;
    }

    virtual int get_field2() {
        return self.field2;
    }
}

class Generics10_4ClassA <T extends Generics10_4ClassB<int>> {
    T field;

    Generics10_4ClassA(T value) {
        self.field = value;
    }

    T get_field() {
        return self.field;
    }

    int call_field_method() {
        return self.field.get_field();
    }

    int call_field_method2() {
        return self.field.get_field2();
    }
}

