MemberTypeInheritance.java revision 553:9d9f26857129
1171169Smlaier/*
2171169Smlaier * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
3171169Smlaier * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4171169Smlaier *
5171169Smlaier * This code is free software; you can redistribute it and/or modify it
6171169Smlaier * under the terms of the GNU General Public License version 2 only, as
7171169Smlaier * published by the Free Software Foundation.
8171169Smlaier *
9171169Smlaier * This code is distributed in the hope that it will be useful, but WITHOUT
10171169Smlaier * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11171169Smlaier * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12171169Smlaier * version 2 for more details (a copy is included in the LICENSE file that
13171169Smlaier * accompanied this code).
14171169Smlaier *
15171169Smlaier * You should have received a copy of the GNU General Public License version
16171169Smlaier * 2 along with this work; if not, write to the Free Software Foundation,
17171169Smlaier * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18171169Smlaier *
19171169Smlaier * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20171169Smlaier * or visit www.oracle.com if you need additional information or have any
21171169Smlaier * questions.
22171169Smlaier */
23171169Smlaier
24171169Smlaier/*
25171169Smlaier * @test
26171169Smlaier * @bug 4254213
27171169Smlaier * @summary Verify that member types of classes and interfaces can be inherited.
28171169Smlaier *
29171169Smlaier * @run compile MemberTypeInheritance.java
30171169Smlaier */
31171169Smlaier
32171169Smlaierclass C {
33171169Smlaier    class D {}
34171169Smlaier    interface E {}
35171169Smlaier}
36171169Smlaier
37171169Smlaierinterface I {
38171169Smlaier    class J {}
39171169Smlaier    interface K{}
40171169Smlaier}
41171169Smlaier
42171169Smlaierclass L extends C {}
43171169Smlaier
44171169Smlaierinterface M extends I {}
45171169Smlaier
46171169Smlaierclass X extends C implements I {
47171169Smlaier    D d;
48171169Smlaier    E e;
49171169Smlaier    J j;
50171169Smlaier    K k;
51171169Smlaier}
52171169Smlaier
53171169Smlaierclass Y extends L implements M {
54171169Smlaier    D d;
55171169Smlaier    E e;
56171169Smlaier    J j;
57171169Smlaier    K k;
58171169Smlaier}
59171169Smlaier
60171169Smlaierclass Outer {
61171169Smlaier
62171169Smlaier    class C {
63171169Smlaier        class D {}
64171169Smlaier        // Inner class cannot have member interface (static member).
65171169Smlaier    }
66171169Smlaier
67171169Smlaier    interface I {
68171169Smlaier        class J {}
69171169Smlaier        interface K{}
70171169Smlaier    }
71171169Smlaier
72171169Smlaier    class L extends C {}
73171169Smlaier
74171169Smlaier    interface M extends I {}
75171169Smlaier
76171169Smlaier    class X extends C implements I {
77171169Smlaier        D d;
78171169Smlaier        J j;
79171169Smlaier        K k;
80171169Smlaier    }
81171169Smlaier
82171169Smlaier    class Y extends L implements M {
83171169Smlaier        D d;
84171169Smlaier        J j;
85171169Smlaier        K k;
86171169Smlaier    }
87171169Smlaier
88171169Smlaier    void test() {
89171169Smlaier
90171169Smlaier        // Blocks may not contain local interfaces.
91171169Smlaier
92171169Smlaier        class C {
93171169Smlaier            class D {}
94171169Smlaier            // Inner class cannot have member interface (static member).
95171169Smlaier        }
96171169Smlaier
97171169Smlaier        class L extends C {}
98171169Smlaier
99171169Smlaier        class X extends C {
100171169Smlaier            D d;
101171169Smlaier        }
102171169Smlaier
103171169Smlaier        class Y extends L {
104171169Smlaier            D d;
105171169Smlaier        }
106171169Smlaier
107171169Smlaier    }
108171169Smlaier
109171169Smlaier}
110171169Smlaier