1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 /**
18  * test calling through an interface
19  */
20 public class Main {
main(String args[])21     public static void main(String args[]) {
22         int result = 0;
23         Iface2Sub1 faceObj;
24         ImplA faceObj2;
25 
26         faceObj = new ImplBSub();
27 
28         result = faceObj.iFunc2(5);
29         System.out.print("ImplBSub intf: ");
30         System.out.println(result);
31 
32         faceObj2 = new ImplA();
33         result = faceObj2.iFunc2(5);
34         System.out.print("ImplA: ");
35         System.out.println(result);
36 
37         objectOverrideTests();
38     }
39 
check(boolean z)40   static void check(boolean z) {
41     if (!z) {
42       throw new AssertionError();
43     }
44   }
45 
objectOverrideTests()46   static void objectOverrideTests() {
47     ObjectOverridingInterface o =
48         new ObjectOverridingInterface() {
49           public boolean equals(Object o) {
50             return true;
51           }
52           public int hashCode() {
53             return 0xC001D00D;
54           }
55           public String toString() {
56             return "Mallet's Mallet";
57           }
58           public int length() {
59             return toString().length();
60           }
61           public char charAt(int i) {
62             return toString().charAt(i);
63           }
64           public CharSequence subSequence(int s, int e) {
65             return toString().subSequence(s, e);
66           }
67         };
68     doObjectOverrideTests(o);
69   }
70 
71   private static interface SubInterface extends Cloneable, SubObjectOverridingInterface {
72   }
73 
74   private static class SubInterfaceImpl implements SubInterface {
length()75     public int length() {
76       return 0;
77     }
charAt(int i)78     public char charAt(int i) {
79       return '!';
80     }
subSequence(int s, int e)81     public CharSequence subSequence(int s, int e) {
82       return "";
83     }
84   }
85 
subObjectOverrideTests(SubInterface i)86   static String subObjectOverrideTests(SubInterface i) {
87     return i.toString();
88   }
89 
doObjectOverrideTests(ObjectOverridingInterface o)90   static void doObjectOverrideTests(ObjectOverridingInterface o) {
91     check(o.equals(null));
92     check(o.hashCode() == 0xC001D00D);
93     check(o.toString().equals("Mallet's Mallet"));
94     check(subObjectOverrideTests(new SubInterfaceImpl()) != null);
95     System.out.println("objectOverrideTests: SUCCESS");
96   }
97 }
98