<?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%2FClass%2FInheritance_Composition</id>
		<title>Java/Class/Inheritance Composition - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FClass%2FInheritance_Composition"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Class/Inheritance_Composition&amp;action=history"/>
		<updated>2026-04-21T15:47:52Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Class/Inheritance_Composition&amp;diff=7177&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Class/Inheritance_Composition&amp;diff=7177&amp;oldid=prev"/>
				<updated>2010-06-01T06:36:22Z</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:36, 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/Class/Inheritance_Composition&amp;diff=7176&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/Class/Inheritance_Composition&amp;diff=7176&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:44Z</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;== Cleanup and 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;
// : c07:Frog.java&lt;br /&gt;
// Cleanup and 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;
class Characteristic {&lt;br /&gt;
  private String s;&lt;br /&gt;
  Characteristic(String s) {&lt;br /&gt;
    this.s = s;&lt;br /&gt;
    System.out.println(&amp;quot;Creating Characteristic &amp;quot; + s);&lt;br /&gt;
  }&lt;br /&gt;
  protected void dispose() {&lt;br /&gt;
    System.out.println(&amp;quot;finalizing Characteristic &amp;quot; + s);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Description {&lt;br /&gt;
  private String s;&lt;br /&gt;
  Description(String s) {&lt;br /&gt;
    this.s = s;&lt;br /&gt;
    System.out.println(&amp;quot;Creating Description &amp;quot; + s);&lt;br /&gt;
  }&lt;br /&gt;
  protected void dispose() {&lt;br /&gt;
    System.out.println(&amp;quot;finalizing Description &amp;quot; + s);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class LivingCreature {&lt;br /&gt;
  private Characteristic p = new Characteristic(&amp;quot;is alive&amp;quot;);&lt;br /&gt;
  private Description t = new Description(&amp;quot;Basic Living Creature&amp;quot;);&lt;br /&gt;
  LivingCreature() {&lt;br /&gt;
    System.out.println(&amp;quot;LivingCreature()&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  protected void dispose() {&lt;br /&gt;
    System.out.println(&amp;quot;LivingCreature dispose&amp;quot;);&lt;br /&gt;
    t.dispose();&lt;br /&gt;
    p.dispose();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Animal extends LivingCreature {&lt;br /&gt;
  private Characteristic p = new Characteristic(&amp;quot;has heart&amp;quot;);&lt;br /&gt;
  private Description t = new Description(&amp;quot;Animal not Vegetable&amp;quot;);&lt;br /&gt;
  Animal() {&lt;br /&gt;
    System.out.println(&amp;quot;Animal()&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  protected void dispose() {&lt;br /&gt;
    System.out.println(&amp;quot;Animal dispose&amp;quot;);&lt;br /&gt;
    t.dispose();&lt;br /&gt;
    p.dispose();&lt;br /&gt;
    super.dispose();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Amphibian extends Animal {&lt;br /&gt;
  private Characteristic p = new Characteristic(&amp;quot;can live in water&amp;quot;);&lt;br /&gt;
  private Description t = new Description(&amp;quot;Both water and land&amp;quot;);&lt;br /&gt;
  Amphibian() {&lt;br /&gt;
    System.out.println(&amp;quot;Amphibian()&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  protected void dispose() {&lt;br /&gt;
    System.out.println(&amp;quot;Amphibian dispose&amp;quot;);&lt;br /&gt;
    t.dispose();&lt;br /&gt;
    p.dispose();&lt;br /&gt;
    super.dispose();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class Frog extends Amphibian {&lt;br /&gt;
  private Characteristic p = new Characteristic(&amp;quot;Croaks&amp;quot;);&lt;br /&gt;
  private Description t = new Description(&amp;quot;Eats Bugs&amp;quot;);&lt;br /&gt;
  public Frog() {&lt;br /&gt;
    System.out.println(&amp;quot;Frog()&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  protected void dispose() {&lt;br /&gt;
    System.out.println(&amp;quot;Frog dispose&amp;quot;);&lt;br /&gt;
    t.dispose();&lt;br /&gt;
    p.dispose();&lt;br /&gt;
    super.dispose();&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Frog frog = new Frog();&lt;br /&gt;
    System.out.println(&amp;quot;Bye!&amp;quot;);&lt;br /&gt;
    frog.dispose();&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;
== Combining composition and 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;
// : c06:PlaceSetting.java&lt;br /&gt;
// Combining composition &amp;amp; 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;
class Plate {&lt;br /&gt;
  Plate(int i) {&lt;br /&gt;
    System.out.println(&amp;quot;Plate constructor&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class DinnerPlate extends Plate {&lt;br /&gt;
  DinnerPlate(int i) {&lt;br /&gt;
    super(i);&lt;br /&gt;
    System.out.println(&amp;quot;DinnerPlate constructor&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Utensil {&lt;br /&gt;
  Utensil(int i) {&lt;br /&gt;
    System.out.println(&amp;quot;Utensil constructor&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Spoon extends Utensil {&lt;br /&gt;
  Spoon(int i) {&lt;br /&gt;
    super(i);&lt;br /&gt;
    System.out.println(&amp;quot;Spoon constructor&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Fork extends Utensil {&lt;br /&gt;
  Fork(int i) {&lt;br /&gt;
    super(i);&lt;br /&gt;
    System.out.println(&amp;quot;Fork constructor&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Knife extends Utensil {&lt;br /&gt;
  Knife(int i) {&lt;br /&gt;
    super(i);&lt;br /&gt;
    System.out.println(&amp;quot;Knife constructor&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// A cultural way of doing something:&lt;br /&gt;
class Custom {&lt;br /&gt;
  Custom(int i) {&lt;br /&gt;
    System.out.println(&amp;quot;Custom constructor&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class PlaceSetting extends Custom {&lt;br /&gt;
  private Spoon sp;&lt;br /&gt;
  private Fork frk;&lt;br /&gt;
  private Knife kn;&lt;br /&gt;
  private DinnerPlate pl;&lt;br /&gt;
  public PlaceSetting(int i) {&lt;br /&gt;
    super(i + 1);&lt;br /&gt;
    sp = new Spoon(i + 2);&lt;br /&gt;
    frk = new Fork(i + 3);&lt;br /&gt;
    kn = new Knife(i + 4);&lt;br /&gt;
    pl = new DinnerPlate(i + 5);&lt;br /&gt;
    System.out.println(&amp;quot;PlaceSetting constructor&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    PlaceSetting x = new PlaceSetting(9);&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;
== Composition for code reuse ==&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;
// : c06:SprinklerSystem.java&lt;br /&gt;
// Composition for code reuse.&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;
class WaterSource {&lt;br /&gt;
  private String s;&lt;br /&gt;
  WaterSource() {&lt;br /&gt;
    System.out.println(&amp;quot;WaterSource()&amp;quot;);&lt;br /&gt;
    s = new String(&amp;quot;Constructed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return s;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class SprinklerSystem {&lt;br /&gt;
  private String valve1, valve2, valve3, valve4;&lt;br /&gt;
  private WaterSource source;&lt;br /&gt;
  private int i;&lt;br /&gt;
  private float f;&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return &amp;quot;valve1 = &amp;quot; + valve1 + &amp;quot;\n&amp;quot; + &amp;quot;valve2 = &amp;quot; + valve2 + &amp;quot;\n&amp;quot;&lt;br /&gt;
        + &amp;quot;valve3 = &amp;quot; + valve3 + &amp;quot;\n&amp;quot; + &amp;quot;valve4 = &amp;quot; + valve4 + &amp;quot;\n&amp;quot;&lt;br /&gt;
        + &amp;quot;i = &amp;quot; + i + &amp;quot;\n&amp;quot; + &amp;quot;f = &amp;quot; + f + &amp;quot;\n&amp;quot; + &amp;quot;source = &amp;quot; + source;&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    SprinklerSystem sprinklers = new SprinklerSystem();&lt;br /&gt;
    System.out.println(sprinklers);&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;
== Inheritance, constructors and arguments ==&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;
// : c06:Chess.java&lt;br /&gt;
// Inheritance, constructors and arguments.&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;
class Game {&lt;br /&gt;
  Game(int i) {&lt;br /&gt;
    System.out.println(&amp;quot;Game constructor&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class BoardGame extends Game {&lt;br /&gt;
  BoardGame(int i) {&lt;br /&gt;
    super(i);&lt;br /&gt;
    System.out.println(&amp;quot;BoardGame constructor&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class Chess extends BoardGame {&lt;br /&gt;
  Chess() {&lt;br /&gt;
    super(11);&lt;br /&gt;
    System.out.println(&amp;quot;Chess constructor&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Chess x = new Chess();&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;
== Inheritance syntax and properties ==&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;
// : c06:Detergent.java&lt;br /&gt;
// Inheritance syntax &amp;amp; properties.&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;
class Cleanser {&lt;br /&gt;
  private String s = new String(&amp;quot;Cleanser&amp;quot;);&lt;br /&gt;
  public void append(String a) {&lt;br /&gt;
    s += a;&lt;br /&gt;
  }&lt;br /&gt;
  public void dilute() {&lt;br /&gt;
    append(&amp;quot; dilute()&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public void apply() {&lt;br /&gt;
    append(&amp;quot; apply()&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public void scrub() {&lt;br /&gt;
    append(&amp;quot; scrub()&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return s;&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Cleanser x = new Cleanser();&lt;br /&gt;
    x.dilute();&lt;br /&gt;
    x.apply();&lt;br /&gt;
    x.scrub();&lt;br /&gt;
    System.out.println(x);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class Detergent extends Cleanser {&lt;br /&gt;
  // Change a method:&lt;br /&gt;
  public void scrub() {&lt;br /&gt;
    append(&amp;quot; Detergent.scrub()&amp;quot;);&lt;br /&gt;
    super.scrub(); // Call base-class version&lt;br /&gt;
  }&lt;br /&gt;
  // Add methods to the interface:&lt;br /&gt;
  public void foam() {&lt;br /&gt;
    append(&amp;quot; foam()&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  // Test the new class:&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Detergent x = new Detergent();&lt;br /&gt;
    x.dilute();&lt;br /&gt;
    x.apply();&lt;br /&gt;
    x.scrub();&lt;br /&gt;
    x.foam();&lt;br /&gt;
    System.out.println(x);&lt;br /&gt;
    System.out.println(&amp;quot;Testing base class:&amp;quot;);&lt;br /&gt;
    Cleanser.main(args);&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>