content: /*
   * Copyright (C) 2012 The Android Open Source Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  /**
   * test calling through an interface
   */
  public class Main {
      public static void main(String args[]) {
          int result = 0;
          Iface2Sub1 faceObj;
          ImplA faceObj2;
  
          faceObj = new ImplBSub();
  
          result = faceObj.iFunc2(5);
          System.out.print("ImplBSub intf: ");
          System.out.println(result);
  
          faceObj2 = new ImplA();
          result = faceObj2.iFunc2(5);
          System.out.print("ImplA: ");
          System.out.println(result);
  
          objectOverrideTests();
      }
  
    static void check(boolean z) {
      if (!z) {
        throw new AssertionError();
      }
    }
  
    static void objectOverrideTests() {
      ObjectOverridingInterface o =
          new ObjectOverridingInterface() {
            public boolean equals(Object o) {
              return true;
            }
            public int hashCode() {
              return 0xC001D00D;
            }
            public String toString() {
              return "Mallet's Mallet";
            }
            public int length() {
              return toString().length();
            }
            public char charAt(int i) {
              return toString().charAt(i);
            }
            public CharSequence subSequence(int s, int e) {
              return toString().subSequence(s, e);
            }
          };
      doObjectOverrideTests(o);
    }
  
    private static interface SubInterface extends Cloneable, SubObjectOverridingInterface {
    }
  
    private static class SubInterfaceImpl implements SubInterface {
      public int length() {
        return 0;
      }
      public char charAt(int i) {
        return '!';
      }
      public CharSequence subSequence(int s, int e) {
        return "";
      }
    }
  
    static String subObjectOverrideTests(SubInterface i) {
      return i.toString();
    }
  
    static void doObjectOverrideTests(ObjectOverridingInterface o) {
      check(o.equals(null));
      check(o.hashCode() == 0xC001D00D);
      check(o.toString().equals("Mallet's Mallet"));
      check(subObjectOverrideTests(new SubInterfaceImpl()) != null);
      System.out.println("objectOverrideTests: SUCCESS");
    }
  }
  