15d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao/* 294c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers * Copyright (C) 2012 The Android Open Source Project 35d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * 45d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Licensed under the Apache License, Version 2.0 (the "License"); 55d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * you may not use this file except in compliance with the License. 65d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * You may obtain a copy of the License at 75d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * 85d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * http://www.apache.org/licenses/LICENSE-2.0 95d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * 105d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Unless required by applicable law or agreed to in writing, software 115d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * distributed under the License is distributed on an "AS IS" BASIS, 125d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * See the License for the specific language governing permissions and 145d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * limitations under the License. 155d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao */ 165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 175d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao/** 185d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * test calling through an interface 195d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao */ 205d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaopublic class Main { 215d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public static void main(String args[]) { 225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao int result = 0; 235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Iface2Sub1 faceObj; 245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao ImplA faceObj2; 255d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 265d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao faceObj = new ImplBSub(); 275d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 285d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao result = faceObj.iFunc2(5); 295d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.print("ImplBSub intf: "); 305d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(result); 315d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 325d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao faceObj2 = new ImplA(); 335d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao result = faceObj2.iFunc2(5); 345d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.print("ImplA: "); 355d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(result); 3694c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers 3794c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers objectOverrideTests(); 3894c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers } 3994c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers 4094c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers static void check(boolean z) { 4194c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers if (!z) { 4294c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers throw new AssertionError(); 435d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 4494c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers } 4594c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers 4694c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers static void objectOverrideTests() { 4794c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers ObjectOverridingInterface o = 4894c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers new ObjectOverridingInterface() { 4994c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers public boolean equals(Object o) { 5094c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers return true; 5194c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers } 5294c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers public int hashCode() { 5394c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers return 0xC001D00D; 5494c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers } 5594c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers public String toString() { 5694c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers return "Mallet's Mallet"; 5794c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers } 5894c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers public int length() { 5994c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers return toString().length(); 6094c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers } 6194c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers public char charAt(int i) { 6294c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers return toString().charAt(i); 6394c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers } 6494c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers public CharSequence subSequence(int s, int e) { 6594c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers return toString().subSequence(s, e); 6694c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers } 6794c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers }; 6894c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers doObjectOverrideTests(o); 6994c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers } 704c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers 714c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers private static interface SubInterface extends Cloneable, SubObjectOverridingInterface { 724c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers } 734c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers 744c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers private static class SubInterfaceImpl implements SubInterface { 754c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers public int length() { 764c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers return 0; 774c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers } 784c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers public char charAt(int i) { 794c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers return '!'; 804c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers } 814c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers public CharSequence subSequence(int s, int e) { 824c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers return ""; 834c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers } 844c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers } 854c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers 864c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers static String subObjectOverrideTests(SubInterface i) { 874c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers return i.toString(); 884c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers } 894c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers 9094c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers static void doObjectOverrideTests(ObjectOverridingInterface o) { 9194c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers check(o.equals(null)); 9294c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers check(o.hashCode() == 0xC001D00D); 9394c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers check(o.toString().equals("Mallet's Mallet")); 944c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers check(subObjectOverrideTests(new SubInterfaceImpl()) != null); 9594c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers System.out.println("objectOverrideTests: SUCCESS"); 9694c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers } 975d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao} 98