1 /*
2  * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  */
23 
24 /*
25  * @test
26  * @bug 4254213
27  * @summary Verify that member types of classes and interfaces can be inherited.
28  *
29  * @run compile MemberTypeInheritance.java
30  */
31 
32 class C {
33     class D {}
34     interface E {}
35 }
36 
37 interface I {
38     class J {}
39     interface K{}
40 }
41 
42 class L extends C {}
43 
44 interface M extends I {}
45 
46 class X extends C implements I {
47     D d;
48     E e;
49     J j;
50     K k;
51 }
52 
53 class Y extends L implements M {
54     D d;
55     E e;
56     J j;
57     K k;
58 }
59 
60 class Outer {
61 
62     class C {
63         class D {}
64         // Inner class cannot have member interface (static member).
65     }
66 
67     interface I {
68         class J {}
69         interface K{}
70     }
71 
72     class L extends C {}
73 
74     interface M extends I {}
75 
76     class X extends C implements I {
77         D d;
78         J j;
79         K k;
80     }
81 
82     class Y extends L implements M {
83         D d;
84         J j;
85         K k;
86     }
87 
test()88     void test() {
89 
90         // Blocks may not contain local interfaces.
91 
92         class C {
93             class D {}
94             // Inner class cannot have member interface (static member).
95         }
96 
97         class L extends C {}
98 
99         class X extends C {
100             D d;
101         }
102 
103         class Y extends L {
104             D d;
105         }
106 
107     }
108 
109 }
110