Welcome to the Java Programming Forums


The professional, friendly Java community. 21,500 members and growing!


The Java Programming Forums are a community of Java programmers from all around the World. Our members have a wide range of skills and they all have one thing in common: A passion to learn and code Java. We invite beginner Java programmers right through to Java professionals to post here and share your knowledge. Become a part of the community, help others, expand your knowledge of Java and enjoy talking with like minded people. Registration is quick and best of all free. We look forward to meeting you.


>> REGISTER NOW TO START POSTING


Members have full access to the forums. Advertisements are removed for registered users.

Results 1 to 2 of 2

Thread: Interface Implementation

  1. #1
    Junior Member
    Join Date
    Dec 2009
    Posts
    1
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Interface Implementation

    I am having a hard time trying to understand interfaces, is that anyone who can break down some info for me?
    Also, I have this code to do, but I can't complete because I don't really understand interface...Any help, explanation, advice appreciated...

     interface ArithmeticOperator {
     
        // Returns the result of applying the operator to operands a and b.
        double operate (double a, double b);
     
        // Return a String that is the name of this operator.
        public void printName (String a);//{
     
    	//String printName ();
    };
    interface OperatorIterator {
     
        // Apply the operator op repeatedly to the startValue, for numIterations
        // times, e.g., for numIterations=4 you would return
        //    op (startValue, op (startValue, op (startValue, startValue)))
        double iterate (ArithmeticOperator op, double startValue, int numIterations);
     
    }
     
    class OpIterator implements OperatorIterator{
     
        public double iterate(ArithmeticOperator op, double startValue, int numIterations){
     
     
        }
    }
     
     
    public class Exam1 {
     
        public static void main (String[] argv)
        {
            // Test 1:
            System.out.println ("TEST 1:");
            ArithmeticOperator add = OperatorFactory.get ("add");
            System.out.println ("  1 " + add.printName() + " 2 = " + add.operate (1,2));
            ArithmeticOperator sub = OperatorFactory.get ("sub");
            System.out.println ("  3 " + sub.printName() + " 2 = " + sub.operate (3,2));
            ArithmeticOperator mult = OperatorFactory.get ("mult");
            System.out.println ("  3 " + mult.printName() + " 2 = " + mult.operate (3,2));
            ArithmeticOperator div = OperatorFactory.get ("div");
            System.out.println ("  3 " + div.printName() + " 2 = " + div.operate (3,2));
     
            // Test 2:
            System.out.println ("TEST 2:");
            ArithmeticOperator add2 = OperatorFactory.get ("add");
            ArithmeticOperator sub2 = OperatorFactory.get ("sub");
            System.out.println ("  Does add2==add? " + add2.equals(add));
            System.out.println ("  Does add2==sub2? " + add2.equals(sub2));
     
            // Test 3:
            System.out.println ("TEST 3:");
            OperatorIterator opIter = new OpIterator ();
            System.out.println ("  3 * 8 = " + opIter.iterate(add, 3, 8));
            System.out.println ("  3 ^ 4 = " + opIter.iterate(mult, 3, 4));
        }
     
    }


  2. #2
    Super Moderator Json's Avatar
    Join Date
    Jul 2009
    Location
    Warrington, United Kingdom
    Posts
    1,274
    My Mood
    Happy
    Thanks
    70
    Thanked 156 Times in 152 Posts

    Default Re: Interface Implementation

    Hello there,

    An interface is simply a blueprint for how you would like the implementing class to look. In the interface you're not allowed to declare any implementing logic what so ever.

    All variables that are declared in an interface are automatically public final static.

    All methods declared are automatically public.

    Lets have a look at an example.

    java.lang.Comparable

    /*
     * @(#)Comparable.java	1.26 06/04/21
     *
     * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
     * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
     */
     
    package java.lang;
    import java.util.*;
     
    /**
     * This interface imposes a total ordering on the objects of each class that
     * implements it.  This ordering is referred to as the class's <i>natural
     * ordering</i>, and the class's <tt>compareTo</tt> method is referred to as
     * its <i>natural comparison method</i>.<p>
     *
     * Lists (and arrays) of objects that implement this interface can be sorted
     * automatically by {@link Collections#sort(List) Collections.sort} (and
     * {@link Arrays#sort(Object[]) Arrays.sort}).  Objects that implement this
     * interface can be used as keys in a {@linkplain SortedMap sorted map} or as
     * elements in a {@linkplain SortedSet sorted set}, without the need to
     * specify a {@linkplain Comparator comparator}.<p>
     *
     * The natural ordering for a class <tt>C</tt> is said to be <i>consistent
     * with equals</i> if and only if <tt>e1.compareTo(e2) == 0</tt> has
     * the same boolean value as <tt>e1.equals(e2)</tt> for every
     * <tt>e1</tt> and <tt>e2</tt> of class <tt>C</tt>.  Note that <tt>null</tt>
     * is not an instance of any class, and <tt>e.compareTo(null)</tt> should
     * throw a <tt>NullPointerException</tt> even though <tt>e.equals(null)</tt>
     * returns <tt>false</tt>.<p>
     *
     * It is strongly recommended (though not required) that natural orderings be
     * consistent with equals.  This is so because sorted sets (and sorted maps)
     * without explicit comparators behave "strangely" when they are used with
     * elements (or keys) whose natural ordering is inconsistent with equals.  In
     * particular, such a sorted set (or sorted map) violates the general contract
     * for set (or map), which is defined in terms of the <tt>equals</tt>
     * method.<p>
     *
     * For example, if one adds two keys <tt>a</tt> and <tt>b</tt> such that
     * <tt>(!a.equals(b) && a.compareTo(b) == 0)</tt> to a sorted
     * set that does not use an explicit comparator, the second <tt>add</tt>
     * operation returns false (and the size of the sorted set does not increase)
     * because <tt>a</tt> and <tt>b</tt> are equivalent from the sorted set's
     * perspective.<p>
     *
     * Virtually all Java core classes that implement <tt>Comparable</tt> have natural
     * orderings that are consistent with equals.  One exception is
     * <tt>java.math.BigDecimal</tt>, whose natural ordering equates
     * <tt>BigDecimal</tt> objects with equal values and different precisions
     * (such as 4.0 and 4.00).<p>
     *
     * For the mathematically inclined, the <i>relation</i> that defines
     * the natural ordering on a given class C is:<pre>
     *       {(x, y) such that x.compareTo(y) &lt;= 0}.
     * </pre> The <i>quotient</i> for this total order is: <pre>
     *       {(x, y) such that x.compareTo(y) == 0}.
     * </pre>
     *
     * It follows immediately from the contract for <tt>compareTo</tt> that the
     * quotient is an <i>equivalence relation</i> on <tt>C</tt>, and that the
     * natural ordering is a <i>total order</i> on <tt>C</tt>.  When we say that a
     * class's natural ordering is <i>consistent with equals</i>, we mean that the
     * quotient for the natural ordering is the equivalence relation defined by
     * the class's {@link Object#equals(Object) equals(Object)} method:<pre>
     *     {(x, y) such that x.equals(y)}. </pre><p>
     *
     * This interface is a member of the
     * <a href="{@docRoot}/../technotes/guides/collections/index.html">
     * Java Collections Framework</a>.
     *
     * @param <T> the type of objects that this object may be compared to
     *
     * @author  Josh Bloch
     * @version 1.26, 04/21/06
     * @see java.util.Comparator
     * @since 1.2
     */
     
    public interface Comparable<T> {
        /**
         * Compares this object with the specified object for order.  Returns a
         * negative integer, zero, or a positive integer as this object is less
         * than, equal to, or greater than the specified object.
         *
         * <p>The implementor must ensure <tt>sgn(x.compareTo(y)) ==
         * -sgn(y.compareTo(x))</tt> for all <tt>x</tt> and <tt>y</tt>.  (This
         * implies that <tt>x.compareTo(y)</tt> must throw an exception iff
         * <tt>y.compareTo(x)</tt> throws an exception.)
         *
         * <p>The implementor must also ensure that the relation is transitive:
         * <tt>(x.compareTo(y)&gt;0 &amp;&amp; y.compareTo(z)&gt;0)</tt> implies
         * <tt>x.compareTo(z)&gt;0</tt>.
         *
         * <p>Finally, the implementor must ensure that <tt>x.compareTo(y)==0</tt>
         * implies that <tt>sgn(x.compareTo(z)) == sgn(y.compareTo(z))</tt>, for
         * all <tt>z</tt>.
         *
         * <p>It is strongly recommended, but <i>not</i> strictly required that
         * <tt>(x.compareTo(y)==0) == (x.equals(y))</tt>.  Generally speaking, any
         * class that implements the <tt>Comparable</tt> interface and violates
         * this condition should clearly indicate this fact.  The recommended
         * language is "Note: this class has a natural ordering that is
         * inconsistent with equals."
         *
         * <p>In the foregoing description, the notation
         * <tt>sgn(</tt><i>expression</i><tt>)</tt> designates the mathematical
         * <i>signum</i> function, which is defined to return one of <tt>-1</tt>,
         * <tt>0</tt>, or <tt>1</tt> according to whether the value of
         * <i>expression</i> is negative, zero or positive.
         *
         * @param   o the object to be compared.
         * @return  a negative integer, zero, or a positive integer as this object
         *		is less than, equal to, or greater than the specified object.
         *
         * @throws ClassCastException if the specified object's type prevents it
         *         from being compared to this object.
         */
        public int compareTo(T o);
    }

    There are a lot of comments in this interface but as you can see it only has ONE method declaration in it public int compareTo(T o);

    This means that every concrete class that you create which implements this interface will HAVE TO IMPLEMENT that method hence the blueprint stuff.

    Looking at the greater picture of this is that whenever you pass an object around but refer to it as an interface you will know that those methods are on that object no matter what as long as it's not null.

    For instance you might have another method on a utility class or whatever which takes a parameter which is of the type of the interface. In this method you then use the methods declared on that interface and return something.

    A common usage for interfaces is when you declare common services of different kinds, you want all the services to have the same methods but all the methods might be implemented differently, one service might call off to a webservice to do something while another implementation of the same interface just reads something from a file on the system its running.

    For some more information on interfaces have a look at What Is an Interface? (The Java™ Tutorials > Learning the Java Language > Object-Oriented Programming Concepts)

    // Json

Similar Threads

  1. Help wih implementation...
    By Frank_nor in forum What's Wrong With My Code?
    Replies: 4
    Last Post: November 24th, 2009, 05:43 PM
  2. B+ Tree implementation
    By programmer in forum Java Theory & Questions
    Replies: 2
    Last Post: November 15th, 2009, 05:47 PM
  3. Binary Search Tree implementation
    By Ceasar in forum Java Theory & Questions
    Replies: 3
    Last Post: October 9th, 2009, 12:23 AM
  4. SOMEONE PLEASE HELP ME ADD THE ACTIONLISTENER INTERFACE...
    By beginning2Understand in forum AWT / Java Swing
    Replies: 5
    Last Post: June 30th, 2009, 12:42 AM
  5. Getting an error while altering a source code
    By marksquall in forum Collections and Generics
    Replies: 3
    Last Post: June 8th, 2009, 02:49 AM