=== tests/cases/conformance/classes/members/inheritanceAndOverriding/derivedClassOverridesProtectedMembers3.ts ===
var x: { foo: string; }
>x : { foo: string; }
>foo : string

var y: { foo: string; bar: string; }
>y : { foo: string; bar: string; }
>foo : string
>bar : string

class Base {
>Base : Base

    a: typeof x;
>a : { foo: string; }
>x : { foo: string; }

    b(a: typeof x) { }
>b : (a: typeof x) => void
>a : { foo: string; }
>x : { foo: string; }

    get c() { return x; }
>c : { foo: string; }
>x : { foo: string; }

    set c(v: typeof x) { }
>c : { foo: string; }
>v : { foo: string; }
>x : { foo: string; }

    d: (a: typeof x) => void;
>d : (a: typeof x) => void
>a : { foo: string; }
>x : { foo: string; }

    static r: typeof x;
>r : { foo: string; }
>x : { foo: string; }

    static s(a: typeof x) { }
>s : (a: typeof x) => void
>a : { foo: string; }
>x : { foo: string; }

    static get t() { return x; }
>t : { foo: string; }
>x : { foo: string; }

    static set t(v: typeof x) { }
>t : { foo: string; }
>v : { foo: string; }
>x : { foo: string; }

    static u: (a: typeof x) => void;
>u : (a: typeof x) => void
>a : { foo: string; }
>x : { foo: string; }

    constructor(a: typeof x) {}
>a : { foo: string; }
>x : { foo: string; }
}

// Errors
// decrease visibility of all public members to protected
class Derived1 extends Base {
>Derived1 : Derived1
>Base : Base

    protected a: typeof x;
>a : { foo: string; }
>x : { foo: string; }

    constructor(a: typeof x) { super(a); }
>a : { foo: string; }
>x : { foo: string; }
>super(a) : void
>super : typeof Base
>a : { foo: string; }
}

class Derived2 extends Base {
>Derived2 : Derived2
>Base : Base

    protected b(a: typeof x) { }
>b : (a: typeof x) => void
>a : { foo: string; }
>x : { foo: string; }

    constructor(a: typeof x) { super(a); }
>a : { foo: string; }
>x : { foo: string; }
>super(a) : void
>super : typeof Base
>a : { foo: string; }
}

class Derived3 extends Base {
>Derived3 : Derived3
>Base : Base

    protected get c() { return x; }
>c : { foo: string; }
>x : { foo: string; }

    constructor(a: typeof x) { super(a); }
>a : { foo: string; }
>x : { foo: string; }
>super(a) : void
>super : typeof Base
>a : { foo: string; }
}

class Derived4 extends Base {
>Derived4 : Derived4
>Base : Base

    protected set c(v: typeof x) { }
>c : { foo: string; }
>v : { foo: string; }
>x : { foo: string; }

    constructor(a: typeof x) { super(a); }
>a : { foo: string; }
>x : { foo: string; }
>super(a) : void
>super : typeof Base
>a : { foo: string; }
}

class Derived5 extends Base {
>Derived5 : Derived5
>Base : Base

    protected d: (a: typeof x) => void ;
>d : (a: typeof x) => void
>a : { foo: string; }
>x : { foo: string; }

    constructor(a: typeof x) { super(a); }
>a : { foo: string; }
>x : { foo: string; }
>super(a) : void
>super : typeof Base
>a : { foo: string; }
}

class Derived6 extends Base {
>Derived6 : Derived6
>Base : Base

    protected static r: typeof x;
>r : { foo: string; }
>x : { foo: string; }

    constructor(a: typeof x) { super(a); }
>a : { foo: string; }
>x : { foo: string; }
>super(a) : void
>super : typeof Base
>a : { foo: string; }
}

class Derived7 extends Base {
>Derived7 : Derived7
>Base : Base

    protected static s(a: typeof x) { }
>s : (a: typeof x) => void
>a : { foo: string; }
>x : { foo: string; }

    constructor(a: typeof x) { super(a); }
>a : { foo: string; }
>x : { foo: string; }
>super(a) : void
>super : typeof Base
>a : { foo: string; }
}

class Derived8 extends Base {
>Derived8 : Derived8
>Base : Base

    protected static get t() { return x; }
>t : { foo: string; }
>x : { foo: string; }

    constructor(a: typeof x) { super(a); }
>a : { foo: string; }
>x : { foo: string; }
>super(a) : void
>super : typeof Base
>a : { foo: string; }
}

class Derived9 extends Base {
>Derived9 : Derived9
>Base : Base

    protected static set t(v: typeof x) { }
>t : { foo: string; }
>v : { foo: string; }
>x : { foo: string; }

    constructor(a: typeof x) { super(a); }
>a : { foo: string; }
>x : { foo: string; }
>super(a) : void
>super : typeof Base
>a : { foo: string; }
}

class Derived10 extends Base {
>Derived10 : Derived10
>Base : Base

    protected static u: (a: typeof x) => void ;
>u : (a: typeof x) => void
>a : { foo: string; }
>x : { foo: string; }

    constructor(a: typeof x) { super(a); }
>a : { foo: string; }
>x : { foo: string; }
>super(a) : void
>super : typeof Base
>a : { foo: string; }
}
