<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FLanguage_Basics%2FInterface_and_Abstract_Class</id>
		<title>Java/Language Basics/Interface and Abstract Class - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FLanguage_Basics%2FInterface_and_Abstract_Class"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Language_Basics/Interface_and_Abstract_Class&amp;action=history"/>
		<updated>2026-04-22T08:08:47Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Language_Basics/Interface_and_Abstract_Class&amp;diff=7537&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Language_Basics/Interface_and_Abstract_Class&amp;diff=7537&amp;oldid=prev"/>
				<updated>2010-06-01T06:47:47Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:47, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Language_Basics/Interface_and_Abstract_Class&amp;diff=7536&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Language_Basics/Interface_and_Abstract_Class&amp;diff=7536&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:45Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Abstract classes and methods ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// : c07:PrivateOverride.java&lt;br /&gt;
// Abstract classes and methods.&lt;br /&gt;
// From &amp;quot;Thinking in Java, 3rd ed.&amp;quot; (c) Bruce Eckel 2002&lt;br /&gt;
// www.BruceEckel.ru. See copyright notice in CopyRight.txt.&lt;br /&gt;
public class PrivateOverride {&lt;br /&gt;
  private void f() {&lt;br /&gt;
    System.out.println(&amp;quot;private f()&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    PrivateOverride po = new Derived();&lt;br /&gt;
    po.f();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Derived extends PrivateOverride {&lt;br /&gt;
  public void f() {&lt;br /&gt;
    System.out.println(&amp;quot;public f()&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
} ///:~&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Extending an interface with inheritance ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// : c08:HorrorShow.java&lt;br /&gt;
// Extending an interface with inheritance.&lt;br /&gt;
// From &amp;quot;Thinking in Java, 3rd ed.&amp;quot; (c) Bruce Eckel 2002&lt;br /&gt;
// www.BruceEckel.ru. See copyright notice in CopyRight.txt.&lt;br /&gt;
interface Monster {&lt;br /&gt;
  void menace();&lt;br /&gt;
}&lt;br /&gt;
interface DangerousMonster extends Monster {&lt;br /&gt;
  void destroy();&lt;br /&gt;
}&lt;br /&gt;
interface Lethal {&lt;br /&gt;
  void kill();&lt;br /&gt;
}&lt;br /&gt;
class DragonZilla implements DangerousMonster {&lt;br /&gt;
  public void menace() {&lt;br /&gt;
  }&lt;br /&gt;
  public void destroy() {&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
interface Vampire extends DangerousMonster, Lethal {&lt;br /&gt;
  void drinkBlood();&lt;br /&gt;
}&lt;br /&gt;
class VeryBadVampire implements Vampire {&lt;br /&gt;
  public void menace() {&lt;br /&gt;
  }&lt;br /&gt;
  public void destroy() {&lt;br /&gt;
  }&lt;br /&gt;
  public void kill() {&lt;br /&gt;
  }&lt;br /&gt;
  public void drinkBlood() {&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class HorrorShow {&lt;br /&gt;
  static void u(Monster b) {&lt;br /&gt;
    b.menace();&lt;br /&gt;
  }&lt;br /&gt;
  static void v(DangerousMonster d) {&lt;br /&gt;
    d.menace();&lt;br /&gt;
    d.destroy();&lt;br /&gt;
  }&lt;br /&gt;
  static void w(Lethal l) {&lt;br /&gt;
    l.kill();&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    DangerousMonster barney = new DragonZilla();&lt;br /&gt;
    u(barney);&lt;br /&gt;
    v(barney);&lt;br /&gt;
    Vampire vlad = new VeryBadVampire();&lt;br /&gt;
    u(vlad);&lt;br /&gt;
    v(vlad);&lt;br /&gt;
    w(vlad);&lt;br /&gt;
  }&lt;br /&gt;
} ///:~&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Find out whether interfaces are inherited ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/** Find out whether interfaces are inherited.&lt;br /&gt;
 * Start with Thread which implements Runnable.&lt;br /&gt;
 */&lt;br /&gt;
public class InterfaceInherit extends Thread {&lt;br /&gt;
  public static void main(String[] a) {&lt;br /&gt;
    new InterfaceInherit().start();&lt;br /&gt;
  }&lt;br /&gt;
  public void run() {&lt;br /&gt;
    if (this instanceof InterfaceInherit)&lt;br /&gt;
    System.out.println(&amp;quot;This is InterfaceInherit&amp;quot;);&lt;br /&gt;
    if (this instanceof Thread)&lt;br /&gt;
    System.out.println(&amp;quot;This is Thread&amp;quot;);&lt;br /&gt;
    if (this instanceof Runnable)&lt;br /&gt;
    System.out.println(&amp;quot;This is Thread -- Interfaces ARE inherited!&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Holds a sequence of Objects ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// : c08:Sequence.java&lt;br /&gt;
// Holds a sequence of Objects.&lt;br /&gt;
// From &amp;quot;Thinking in Java, 3rd ed.&amp;quot; (c) Bruce Eckel 2002&lt;br /&gt;
// www.BruceEckel.ru. See copyright notice in CopyRight.txt.&lt;br /&gt;
interface Selector {&lt;br /&gt;
  boolean end();&lt;br /&gt;
  Object current();&lt;br /&gt;
  void next();&lt;br /&gt;
}&lt;br /&gt;
public class Sequence {&lt;br /&gt;
  private Object[] objects;&lt;br /&gt;
  private int next = 0;&lt;br /&gt;
  public Sequence(int size) {&lt;br /&gt;
    objects = new Object[size];&lt;br /&gt;
  }&lt;br /&gt;
  public void add(Object x) {&lt;br /&gt;
    if (next &amp;lt; objects.length)&lt;br /&gt;
      objects[next++] = x;&lt;br /&gt;
  }&lt;br /&gt;
  private class SSelector implements Selector {&lt;br /&gt;
    private int i = 0;&lt;br /&gt;
    public boolean end() {&lt;br /&gt;
      return i == objects.length;&lt;br /&gt;
    }&lt;br /&gt;
    public Object current() {&lt;br /&gt;
      return objects[i];&lt;br /&gt;
    }&lt;br /&gt;
    public void next() {&lt;br /&gt;
      if (i &amp;lt; objects.length)&lt;br /&gt;
        i++;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public Selector getSelector() {&lt;br /&gt;
    return new SSelector();&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Sequence sequence = new Sequence(10);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 10; i++)&lt;br /&gt;
      sequence.add(Integer.toString(i));&lt;br /&gt;
    Selector selector = sequence.getSelector();&lt;br /&gt;
    while (!selector.end()) {&lt;br /&gt;
      System.out.println(selector.current());&lt;br /&gt;
      selector.next();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
} ///:~&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Implement multiple interfaces ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) Ian F. Darwin, http://www.darwinsys.ru/, 1996-2002.&lt;br /&gt;
 * All rights reserved. Software written by Ian F. Darwin and others.&lt;br /&gt;
 * $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 * 1. Redistributions of source code must retain the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer.&lt;br /&gt;
 * 2. Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
 *    documentation and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS&amp;quot;&amp;quot;&lt;br /&gt;
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED&lt;br /&gt;
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR&lt;br /&gt;
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS&lt;br /&gt;
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR&lt;br /&gt;
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF&lt;br /&gt;
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS&lt;br /&gt;
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN&lt;br /&gt;
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)&lt;br /&gt;
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE&lt;br /&gt;
 * POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 * &lt;br /&gt;
 * Java, the Duke mascot, and all variants of Sun&amp;quot;s Java &amp;quot;steaming coffee&lt;br /&gt;
 * cup&amp;quot; logo are trademarks of Sun Microsystems. Sun&amp;quot;s, and James Gosling&amp;quot;s,&lt;br /&gt;
 * pioneering role in inventing and promulgating (and standardizing) the Java &lt;br /&gt;
 * language and environment is gratefully acknowledged.&lt;br /&gt;
 * &lt;br /&gt;
 * The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&amp;amp;T, for&lt;br /&gt;
 * inventing predecessor languages C and C++ is also gratefully acknowledged.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
interface I1 {&lt;br /&gt;
  abstract void test(int i);&lt;br /&gt;
}&lt;br /&gt;
interface I2 {&lt;br /&gt;
  abstract void test(String s);&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * To show what happens to the possible conflicts if you &lt;br /&gt;
 * implement multiple interfaces: there are no conflicts.&lt;br /&gt;
 * If multiple interfaces have the exact same method, you&lt;br /&gt;
 * merely have to implement it.&lt;br /&gt;
 * If multiple interfaces have similar methods, you must&lt;br /&gt;
 * implement them all.&lt;br /&gt;
 * There&amp;quot;s still no conflict.&lt;br /&gt;
 */&lt;br /&gt;
public class MultInterfaces implements I1, I2 {&lt;br /&gt;
  public void test(int i) {&lt;br /&gt;
    System.out.println(&amp;quot;In MultInterfaces.I1.test&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public void test(String s) {&lt;br /&gt;
    System.out.println(&amp;quot;In MultInterfaces.I2.test&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] a) {&lt;br /&gt;
    MultInterfaces t = new MultInterfaces();&lt;br /&gt;
    t.test(42);&lt;br /&gt;
    t.test(&amp;quot;Hello&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Initializing interface fields with non-constant initializers ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// : c08:RandVals.java&lt;br /&gt;
// Initializing interface fields with non-constant initializers.&lt;br /&gt;
// From &amp;quot;Thinking in Java, 3rd ed.&amp;quot; (c) Bruce Eckel 2002&lt;br /&gt;
// www.BruceEckel.ru. See copyright notice in CopyRight.txt.&lt;br /&gt;
import java.util.Random;&lt;br /&gt;
public interface RandVals {&lt;br /&gt;
  Random rand = new Random();&lt;br /&gt;
  int randomInt = rand.nextInt(10);&lt;br /&gt;
  long randomLong = rand.nextLong() * 10;&lt;br /&gt;
  float randomFloat = rand.nextLong() * 10;&lt;br /&gt;
  double randomDouble = rand.nextDouble() * 10;&lt;br /&gt;
} ///:~&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interface Collision ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// : c08:InterfaceCollision.java&lt;br /&gt;
// From &amp;quot;Thinking in Java, 3rd ed.&amp;quot; (c) Bruce Eckel 2002&lt;br /&gt;
// www.BruceEckel.ru. See copyright notice in CopyRight.txt.&lt;br /&gt;
interface I1 {&lt;br /&gt;
  void f();&lt;br /&gt;
}&lt;br /&gt;
interface I2 {&lt;br /&gt;
  int f(int i);&lt;br /&gt;
}&lt;br /&gt;
interface I3 {&lt;br /&gt;
  int f();&lt;br /&gt;
}&lt;br /&gt;
class C {&lt;br /&gt;
  public int f() {&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class C2 implements I1, I2 {&lt;br /&gt;
  public void f() {&lt;br /&gt;
  }&lt;br /&gt;
  public int f(int i) {&lt;br /&gt;
    return 1;&lt;br /&gt;
  } // overloaded&lt;br /&gt;
}&lt;br /&gt;
class C3 extends C implements I2 {&lt;br /&gt;
  public int f(int i) {&lt;br /&gt;
    return 1;&lt;br /&gt;
  } // overloaded&lt;br /&gt;
}&lt;br /&gt;
class C4 extends C implements I3 {&lt;br /&gt;
  // Identical, no problem:&lt;br /&gt;
  public int f() {&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// Methods differ only by return type:&lt;br /&gt;
//! class C5 extends C implements I1 {}&lt;br /&gt;
//! interface I4 extends I1, I3 {} ///:~&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interface Usage Example ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
interface Act {&lt;br /&gt;
  void act();&lt;br /&gt;
}&lt;br /&gt;
class Actor1 implements Act {&lt;br /&gt;
  public void act() {&lt;br /&gt;
    System.out.println(&amp;quot;To be, or not to be&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Actor2 implements Act {&lt;br /&gt;
  public void act() {&lt;br /&gt;
    System.out.println(&amp;quot;Wherefore art thou Romeo?&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class TryOut {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    Actor1 hamlet = new Actor1();&lt;br /&gt;
    Actor2 juliet = new Actor2();&lt;br /&gt;
    tryout(hamlet);&lt;br /&gt;
    tryout(juliet);&lt;br /&gt;
  }&lt;br /&gt;
  private static void tryout(Act actor) {&lt;br /&gt;
    actor.act();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Multiple interfaces ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// : c08:Adventure.java&lt;br /&gt;
// Multiple interfaces.&lt;br /&gt;
// From &amp;quot;Thinking in Java, 3rd ed.&amp;quot; (c) Bruce Eckel 2002&lt;br /&gt;
// www.BruceEckel.ru. See copyright notice in CopyRight.txt.&lt;br /&gt;
interface CanFight {&lt;br /&gt;
  void fight();&lt;br /&gt;
}&lt;br /&gt;
interface CanSwim {&lt;br /&gt;
  void swim();&lt;br /&gt;
}&lt;br /&gt;
interface CanFly {&lt;br /&gt;
  void fly();&lt;br /&gt;
}&lt;br /&gt;
class ActionCharacter {&lt;br /&gt;
  public void fight() {&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Hero extends ActionCharacter implements CanFight, CanSwim, CanFly {&lt;br /&gt;
  public void swim() {&lt;br /&gt;
  }&lt;br /&gt;
  public void fly() {&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class Adventure {&lt;br /&gt;
  public static void t(CanFight x) {&lt;br /&gt;
    x.fight();&lt;br /&gt;
  }&lt;br /&gt;
  public static void u(CanSwim x) {&lt;br /&gt;
    x.swim();&lt;br /&gt;
  }&lt;br /&gt;
  public static void v(CanFly x) {&lt;br /&gt;
    x.fly();&lt;br /&gt;
  }&lt;br /&gt;
  public static void w(ActionCharacter x) {&lt;br /&gt;
    x.fight();&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Hero h = new Hero();&lt;br /&gt;
    t(h); // Treat it as a CanFight&lt;br /&gt;
    u(h); // Treat it as a CanSwim&lt;br /&gt;
    v(h); // Treat it as a CanFly&lt;br /&gt;
    w(h); // Treat it as an ActionCharacter&lt;br /&gt;
  }&lt;br /&gt;
} ///:~&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Multi Super Interfaces ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class MultiSuperInterfaces {&lt;br /&gt;
  public interface Marker extends java.io.Serializable, java.rmi.Remote,&lt;br /&gt;
      java.lang.Runnable {&lt;br /&gt;
  }&lt;br /&gt;
  public class Marked implements Marker {&lt;br /&gt;
    public void run() {&lt;br /&gt;
      // needed for Runnable&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new MultiSuperInterfaces().print();&lt;br /&gt;
  }&lt;br /&gt;
  void print() {&lt;br /&gt;
    Object o = new Marked();&lt;br /&gt;
    if (o instanceof java.io.Serializable) {&lt;br /&gt;
      System.out.println(&amp;quot;Is Serializable&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    if (o instanceof java.rmi.Remote) {&lt;br /&gt;
      System.out.println(&amp;quot;Is Remote&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    if (o instanceof java.lang.Runnable) {&lt;br /&gt;
      System.out.println(&amp;quot;Is Runnable&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== This shows that a class implementing an interface need not ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import java.io.*;&lt;br /&gt;
/** This shows that a class implementing an interface need not&lt;br /&gt;
 * declare all the Throws that are declared in the interface.&lt;br /&gt;
 */&lt;br /&gt;
public class InterfaceWithoutAllThrows {&lt;br /&gt;
  interface bar {&lt;br /&gt;
    public void foo() throws IOException;&lt;br /&gt;
  }&lt;br /&gt;
  class baz implements bar {&lt;br /&gt;
    public void foo() {&lt;br /&gt;
      System.out.println(&amp;quot;This is foo-lish&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] argv) {&lt;br /&gt;
    new InterfaceWithoutAllThrows().new baz().foo();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Two ways that a class can implement multiple interfaces ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// : c08:MultiInterfaces.java&lt;br /&gt;
// Two ways that a class can implement multiple interfaces.&lt;br /&gt;
// From &amp;quot;Thinking in Java, 3rd ed.&amp;quot; (c) Bruce Eckel 2002&lt;br /&gt;
// www.BruceEckel.ru. See copyright notice in CopyRight.txt.&lt;br /&gt;
interface A {&lt;br /&gt;
}&lt;br /&gt;
interface B {&lt;br /&gt;
}&lt;br /&gt;
class X implements A, B {&lt;br /&gt;
}&lt;br /&gt;
class Y implements A {&lt;br /&gt;
  B makeB() {&lt;br /&gt;
    // Anonymous inner class:&lt;br /&gt;
    return new B() {&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class MultiInterfaces {&lt;br /&gt;
  static void takesA(A a) {&lt;br /&gt;
  }&lt;br /&gt;
  static void takesB(B b) {&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    X x = new X();&lt;br /&gt;
    Y y = new Y();&lt;br /&gt;
    takesA(x);&lt;br /&gt;
    takesA(y);&lt;br /&gt;
    takesB(x);&lt;br /&gt;
    takesB(y.makeB());&lt;br /&gt;
  }&lt;br /&gt;
} ///:~&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>