Home | History | Annotate | Download | only in DefaultMethods
      1 /*
      2  * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  *
      8  *   - Redistributions of source code must retain the above copyright
      9  *     notice, this list of conditions and the following disclaimer.
     10  *
     11  *   - Redistributions in binary form must reproduce the above copyright
     12  *     notice, this list of conditions and the following disclaimer in the
     13  *     documentation and/or other materials provided with the distribution.
     14  *
     15  *   - Neither the name of Oracle nor the names of its
     16  *     contributors may be used to endorse or promote products derived
     17  *     from this software without specific prior written permission.
     18  *
     19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
     20  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     21  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     23  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     24  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     26  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
     27  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
     28  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     29  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     30  */
     31 
     32 /**
     33  * The sample illustrates the simplest use case of the <b>default methods</b>.
     34  */
     35 public class SimplestUsage {
     36 
     37     /**
     38      * The Animal interface provides the default implementation
     39      * of the {@link #eat} method.
     40      */
     41     public interface Animal {
     42 
     43         /**
     44          * Return string representation of the eat action for Animal
     45          *
     46          * @return string representation of the eat action for Animal
     47          */
     48         default String eat() {
     49             return this.getClass().getSimpleName()
     50                     + " eats like an ordinary animal";
     51         }
     52     }
     53 
     54     /**
     55      * The Dog class doesn't have its own implementation of the {@link #eat}
     56      * method and uses the default implementation.
     57      */
     58     public static class Dog implements Animal {
     59     }
     60 
     61     /**
     62      * The Mosquito class implements {@link #eat} method, its own implementation
     63      * overrides the default implementation.
     64      *
     65      */
     66     public static class Mosquito implements Animal {
     67 
     68         /**
     69          * Return string representation of the eat action for Mosquito
     70          *
     71          * @return string representation of the eat action for Mosquito
     72          */
     73         @Override
     74         public String eat() {
     75             return "Mosquito consumes blood";
     76         }
     77     }
     78 
     79     /**
     80      * Illustrate behavior of the classes: {@link Dog} and {@link Mosquito}
     81      *
     82      * @param args command-line arguments
     83      */
     84     public static void main(String[] args) {
     85         // "Dog eats like an ordinary animal" is output
     86         System.out.println(new Dog().eat());
     87 
     88         // "Mosquito consumes blood" is output
     89         System.out.println(new Mosquito().eat());
     90     }
     91 }
     92