MemberTypeInheritance.java revision 0:9a66ca7c79fa
190075Sobrien/*
2132718Skan * Copyright 1999 Sun Microsystems, Inc.  All Rights Reserved.
3169689Skan * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
490075Sobrien *
590075Sobrien * This code is free software; you can redistribute it and/or modify it
690075Sobrien * under the terms of the GNU General Public License version 2 only, as
790075Sobrien * published by the Free Software Foundation.
8132718Skan *
990075Sobrien * This code is distributed in the hope that it will be useful, but WITHOUT
10132718Skan * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11132718Skan * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12132718Skan * version 2 for more details (a copy is included in the LICENSE file that
13132718Skan * accompanied this code).
1490075Sobrien *
15132718Skan * You should have received a copy of the GNU General Public License version
16132718Skan * 2 along with this work; if not, write to the Free Software Foundation,
17132718Skan * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18132718Skan *
1990075Sobrien * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20132718Skan * CA 95054 USA or visit www.sun.com if you need additional information or
21132718Skan * have any questions.
22169689Skan */
23169689Skan
24169689Skan/*
2590075Sobrien * @test
2690075Sobrien * @bug 4254213
27132718Skan * @summary Verify that member types of classes and interfaces can be inherited.
28132718Skan *
2990075Sobrien * @run compile MemberTypeInheritance.java
3090075Sobrien */
3190075Sobrien
3290075Sobrienclass C {
3390075Sobrien    class D {}
3490075Sobrien    interface E {}
3590075Sobrien}
3690075Sobrien
3790075Sobrieninterface I {
3890075Sobrien    class J {}
3990075Sobrien    interface K{}
4090075Sobrien}
4190075Sobrien
4290075Sobrienclass L extends C {}
4390075Sobrien
4490075Sobrieninterface M extends I {}
4590075Sobrien
4690075Sobrienclass X extends C implements I {
4790075Sobrien    D d;
4890075Sobrien    E e;
4990075Sobrien    J j;
5090075Sobrien    K k;
5190075Sobrien}
5290075Sobrien
53132718Skanclass Y extends L implements M {
54169689Skan    D d;
5590075Sobrien    E e;
5690075Sobrien    J j;
5790075Sobrien    K k;
5890075Sobrien}
5990075Sobrien
6090075Sobrienclass Outer {
6190075Sobrien
6290075Sobrien    class C {
63169689Skan        class D {}
64132718Skan        // Inner class cannot have member interface (static member).
65169689Skan    }
66169689Skan
67132718Skan    interface I {
68132718Skan        class J {}
69169689Skan        interface K{}
70132718Skan    }
71132718Skan
72169689Skan    class L extends C {}
73169689Skan
74132718Skan    interface M extends I {}
75132718Skan
76169689Skan    class X extends C implements I {
7790075Sobrien        D d;
78132718Skan        J j;
7990075Sobrien        K k;
80132718Skan    }
81132718Skan
82132718Skan    class Y extends L implements M {
83132718Skan        D d;
84132718Skan        J j;
85132718Skan        K k;
86132718Skan    }
87132718Skan
88169689Skan    void test() {
89132718Skan
90132718Skan        // Blocks may not contain local interfaces.
91132718Skan
92132718Skan        class C {
93132718Skan            class D {}
94132718Skan            // Inner class cannot have member interface (static member).
95132718Skan        }
96132718Skan
97132718Skan        class L extends C {}
98132718Skan
99132718Skan        class X extends C {
100132718Skan            D d;
101132718Skan        }
102132718Skan
103132718Skan        class Y extends L {
104132718Skan            D d;
105132718Skan        }
106132718Skan
107132718Skan    }
108132718Skan
109132718Skan}
110132718Skan