<?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_Tutorial%2FClass_Definition%2FPolymorphism</id>
		<title>Java Tutorial/Class Definition/Polymorphism - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FClass_Definition%2FPolymorphism"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Class_Definition/Polymorphism&amp;action=history"/>
		<updated>2026-04-24T19:27:21Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/Class_Definition/Polymorphism&amp;diff=4236&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Class_Definition/Polymorphism&amp;diff=4236&amp;oldid=prev"/>
				<updated>2010-06-01T05:00:59Z</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;Версия 05:00, 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_Tutorial/Class_Definition/Polymorphism&amp;diff=4235&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Class_Definition/Polymorphism&amp;diff=4235&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:27Z</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;==  An example of polymorphism ==&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;
class Employee {&lt;br /&gt;
  public void work() {&lt;br /&gt;
    System.out.println(&amp;quot;I am an employee.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Manager extends Employee {&lt;br /&gt;
  public void work() {&lt;br /&gt;
    System.out.println(&amp;quot;I am a manager.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public void manage() {&lt;br /&gt;
    System.out.println(&amp;quot;Managing ...&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class PolymorphismTest1 {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Employee employee;&lt;br /&gt;
    employee = new Manager();&lt;br /&gt;
    System.out.println(employee.getClass().getName());&lt;br /&gt;
    employee.work();&lt;br /&gt;
    Manager manager = (Manager) employee;&lt;br /&gt;
    manager.manage();&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;
==  Constructors and polymorphism don&amp;quot;t produce what you might expect ==&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;
abstract class Glyph {&lt;br /&gt;
  abstract void draw();&lt;br /&gt;
  Glyph() {&lt;br /&gt;
    System.out.println(&amp;quot;Glyph() before draw()&amp;quot;);&lt;br /&gt;
    draw();&lt;br /&gt;
    System.out.println(&amp;quot;Glyph() after draw()&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class RoundGlyph extends Glyph {&lt;br /&gt;
  private int radius = 1;&lt;br /&gt;
  RoundGlyph(int r) {&lt;br /&gt;
    radius = r;&lt;br /&gt;
    System.out.println(&amp;quot;RoundGlyph.RoundGlyph(), radius = &amp;quot; + radius);&lt;br /&gt;
  }&lt;br /&gt;
  void draw() {&lt;br /&gt;
    System.out.println(&amp;quot;RoundGlyph.draw(), radius = &amp;quot; + radius);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new RoundGlyph(5);&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;
&amp;lt;pre class=codeResult&amp;gt;Glyph() before draw()&lt;br /&gt;
RoundGlyph.draw(), radius = 0&lt;br /&gt;
Glyph() after draw()&lt;br /&gt;
RoundGlyph.RoundGlyph(), radius = 5&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Downcasting and Run-Time Type Identification (RTTI) ==&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;
class Useful {&lt;br /&gt;
  public void f() {&lt;br /&gt;
  }&lt;br /&gt;
  public void g() {&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MoreUseful extends Useful {&lt;br /&gt;
  public void f() {&lt;br /&gt;
  }&lt;br /&gt;
  public void g() {&lt;br /&gt;
  }&lt;br /&gt;
  public void u() {&lt;br /&gt;
  }&lt;br /&gt;
  public void v() {&lt;br /&gt;
  }&lt;br /&gt;
  public void w() {&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Useful[] x = { new Useful(), new MoreUseful() };&lt;br /&gt;
    x[0].f();&lt;br /&gt;
    x[1].g();&lt;br /&gt;
    // x[1].u();&lt;br /&gt;
    ((MoreUseful) x[1]).u(); // Downcast/RTTI&lt;br /&gt;
    ((MoreUseful) x[0]).u(); // Exception thrown&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;
==  Dynamic Method Dispatch ==&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;
class A {&lt;br /&gt;
  void callme() {&lt;br /&gt;
    System.out.println(&amp;quot;Inside A&amp;quot;s callme method&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class B extends A {&lt;br /&gt;
  void callme() {&lt;br /&gt;
    System.out.println(&amp;quot;Inside B&amp;quot;s callme method&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class C extends A {&lt;br /&gt;
  void callme() {&lt;br /&gt;
    System.out.println(&amp;quot;Inside C&amp;quot;s callme method&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Dispatch {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    A a = new A(); // object of type A&lt;br /&gt;
    B b = new B(); // object of type B&lt;br /&gt;
    C c = new C(); // object of type C&lt;br /&gt;
    A r; // obtain a reference of type A&lt;br /&gt;
    r = a; // r refers to an A object&lt;br /&gt;
    r.callme(); // calls A&amp;quot;s version of callme&lt;br /&gt;
    r = b; // r refers to a B object&lt;br /&gt;
    r.callme(); // calls B&amp;quot;s version of callme&lt;br /&gt;
    r = c; // r refers to a C object&lt;br /&gt;
    r.callme(); // calls C&amp;quot;s version of callme&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;
==  Polymorphism ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;It means the ability of a single variable of a given type to be used to reference objects of &lt;br /&gt;
   different types and to automatically call the method that is specific to the type of object &lt;br /&gt;
   the variable references. (Ivor Horton&amp;quot;s Beginning Java 2, JDK 5 Edition by Ivor Horton Wrox Press 2005 )&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;polymorphism works with derived class objects.&amp;lt;/p&amp;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;
import java.util.Random;&lt;br /&gt;
class Animal {&lt;br /&gt;
  public Animal(String aType) {&lt;br /&gt;
    type = new String(aType);&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return &amp;quot;This is a &amp;quot; + type;&lt;br /&gt;
  }&lt;br /&gt;
  public void sound(){&lt;br /&gt;
    System.out.println(&amp;quot;Sound for an animal&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  private String type;&lt;br /&gt;
}&lt;br /&gt;
class Dog extends Animal {&lt;br /&gt;
  public Dog(String aType){&lt;br /&gt;
   super(aType); &lt;br /&gt;
  }&lt;br /&gt;
  public void sound() {&lt;br /&gt;
    System.out.println(&amp;quot;Woof Woof&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Cat extends Animal {&lt;br /&gt;
  public Cat(String aName) {&lt;br /&gt;
    super(&amp;quot;Cat&amp;quot;); &lt;br /&gt;
    name = aName; &lt;br /&gt;
    breed = &amp;quot;Unknown&amp;quot;; &lt;br /&gt;
  }&lt;br /&gt;
  public Cat(String aName, String aBreed) {&lt;br /&gt;
    super(&amp;quot;Cat&amp;quot;); &lt;br /&gt;
    name = aName; &lt;br /&gt;
    breed = aBreed; &lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return super.toString() + &amp;quot;\nIt&amp;quot;s &amp;quot; + name + &amp;quot; the &amp;quot; + breed;&lt;br /&gt;
  }&lt;br /&gt;
  public void sound() {&lt;br /&gt;
    System.out.println(&amp;quot;Miiaooww&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  private String name;&lt;br /&gt;
  private String breed;&lt;br /&gt;
}&lt;br /&gt;
class Duck extends Animal {&lt;br /&gt;
  public Duck(String aName) {&lt;br /&gt;
    super(&amp;quot;Duck&amp;quot;); &lt;br /&gt;
    name = aName; &lt;br /&gt;
    breed = &amp;quot;Unknown&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  public Duck(String aName, String aBreed) {&lt;br /&gt;
    super(&amp;quot;Duck&amp;quot;); &lt;br /&gt;
    name = aName; &lt;br /&gt;
    breed = aBreed;&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return super.toString() + &amp;quot;\nIt&amp;quot;s &amp;quot; + name + &amp;quot; the &amp;quot; + breed;&lt;br /&gt;
  }&lt;br /&gt;
  public void sound() {&lt;br /&gt;
    System.out.println(&amp;quot;Quack quackquack&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  private String name;&lt;br /&gt;
  private String breed;&lt;br /&gt;
}&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Animal[] theAnimals = { new Dog(&amp;quot;A&amp;quot;), &lt;br /&gt;
                            new Cat(&amp;quot;C&amp;quot;, &amp;quot;D&amp;quot;),&lt;br /&gt;
                            new Duck(&amp;quot;E&amp;quot;, &amp;quot;F&amp;quot;) };&lt;br /&gt;
    Animal petChoice;&lt;br /&gt;
    Random select = new Random();&lt;br /&gt;
    for (int i = 0; i &amp;lt; 5; i++) {&lt;br /&gt;
      petChoice = theAnimals[select.nextInt(theAnimals.length)];&lt;br /&gt;
      System.out.println(&amp;quot;\nYour choice:\n&amp;quot; + petChoice);&lt;br /&gt;
      petChoice.sound();&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;
&amp;lt;pre class=codeResult&amp;gt;Your choice:&lt;br /&gt;
This is a A&lt;br /&gt;
Woof Woof&lt;br /&gt;
Your choice:&lt;br /&gt;
This is a Duck&lt;br /&gt;
It&amp;quot;s E the F&lt;br /&gt;
Quack quackquack&lt;br /&gt;
Your choice:&lt;br /&gt;
This is a Duck&lt;br /&gt;
It&amp;quot;s E the F&lt;br /&gt;
Quack quackquack&lt;br /&gt;
Your choice:&lt;br /&gt;
This is a Duck&lt;br /&gt;
It&amp;quot;s E the F&lt;br /&gt;
Quack quackquack&lt;br /&gt;
Your choice:&lt;br /&gt;
This is a Duck&lt;br /&gt;
It&amp;quot;s E the F&lt;br /&gt;
Quack quackquack&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Using run-time polymorphism. ==&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;
class Figure {&lt;br /&gt;
  double dim1;&lt;br /&gt;
  double dim2;&lt;br /&gt;
  Figure(double a, double b) {&lt;br /&gt;
    dim1 = a;&lt;br /&gt;
    dim2 = b;&lt;br /&gt;
  }&lt;br /&gt;
  double area() {&lt;br /&gt;
    System.out.println(&amp;quot;Area for Figure is undefined.&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Rectangle extends Figure {&lt;br /&gt;
  Rectangle(double a, double b) {&lt;br /&gt;
    super(a, b);&lt;br /&gt;
  }&lt;br /&gt;
  // override area for rectangle&lt;br /&gt;
  double area() {&lt;br /&gt;
    System.out.println(&amp;quot;Inside Area for Rectangle.&amp;quot;);&lt;br /&gt;
    return dim1 * dim2;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Triangle extends Figure {&lt;br /&gt;
  Triangle(double a, double b) {&lt;br /&gt;
    super(a, b);&lt;br /&gt;
  }&lt;br /&gt;
  // override area for right triangle&lt;br /&gt;
  double area() {&lt;br /&gt;
    System.out.println(&amp;quot;Inside Area for Triangle.&amp;quot;);&lt;br /&gt;
    return dim1 * dim2 / 2;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class FindAreas {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    Figure f = new Figure(10, 10);&lt;br /&gt;
    Rectangle r = new Rectangle(9, 5);&lt;br /&gt;
    Triangle t = new Triangle(10, 8);&lt;br /&gt;
    Figure figref;&lt;br /&gt;
    figref = r;&lt;br /&gt;
    System.out.println(&amp;quot;Area is &amp;quot; + figref.area());&lt;br /&gt;
    figref = t;&lt;br /&gt;
    System.out.println(&amp;quot;Area is &amp;quot; + figref.area());&lt;br /&gt;
    figref = f;&lt;br /&gt;
    System.out.println(&amp;quot;Area is &amp;quot; + figref.area());&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>