java tutorial - Наследование и полиморфизм в Java - учебник java - java programming - учиться java - java basics - java for beginners



1- Введение

  • Наследство и полиморфизм (Inheritance & polymorphism) - это очень важное понятие в Java. Которые вы должны понять лучше, если вы хотите обучиться в Java.

2- Класс, конструктор, экземпляр (Class, Constructor, instance)

  • Вам нужно ясно понять про класс, конструктор (constructor) и объект перед тем как начать обучение наследственного отношения в java. Рассмотрим class Person, описывающий человека с информацией полное имя, год рождения, mесто рождения.

Person.java

package org.wikitechy.tutorial.inheritance.basic;
 
public class Person {
 
    // Field name - name of person.
    private String name;
    // Field bornYear
    private Integer bornYear;
    // Field placeOfBirth.
    private String placeOfBirth;
 
    // Constructor has 3 parameters.
    // The aim is to assign values to the fields of Person.
    // Specify the name, year of birth, place of birth of a person.
    public Person(String name, Integer bornYear, String placeOfBirth) {
        this.name = name;
        this.bornYear = bornYear;
        this.placeOfBirth = placeOfBirth;
    }
 
    // Constructor has 2 parameters.
    // The aim is to assign values to the name, born year fileds of the Person.
    // The place of birth is not assigned.
    public Person(String name, Integer bornYear) {
        this.name = name;
        this.bornYear = bornYear;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Integer getBornYear() {
        return bornYear;
    }
 
    public void setBornYear(Integer bornYear) {
        this.bornYear = bornYear;
    }
 
    public String getPlaceOfBirth() {
        return placeOfBirth;
    }
 
    public void setPlaceOfBirth(String placeOfBirth) {
        this.placeOfBirth = placeOfBirth;
    }
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда

PersonDemo.java

package org.wikitechy.tutorial.inheritance.basic;
 
public class PersonDemo {
 
    public static void main(String[] args) {
 
        // Instance: Thomas Edison.
        Person edison = new Person("Thomas Edison", 1847);
 
        System.out.println("Info:");
        System.out.println("Name: " + edison.getName());
        System.out.println("Born Year: " + edison.getBornYear());
        System.out.println("Place Of Birth: " + edison.getPlaceOfBirth() );
 
        // Instance: Bill Gates
        Person billGates = new Person("Bill Gate", 1955, "Seattle, Washington");
 
        System.out.println("Info:");
        System.out.println("Name: " + billGates.getName());
        System.out.println("Born Year: " + billGates.getBornYear());
        System.out.println("Place Of Birth: " + billGates.getPlaceOfBirth());
 
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда

Отличие Class, конструктор (constructor) и объект:

  • Class Person симулирует класс людей, это что-то абстрактное, но имеющее информацию, в примере выше информация это полное имя, год рождения, mесто рождения.

Конструктор (Constructor) - Так же называют "Метод инициализации"

  • Конструктор всегда имеет одинаковое название с классом
  • Один класс имеет один или более конструкторов.
  • Конструктор имеет или не имеет параметры, конструктор без параметров называется конструктор по умолчанию.
  • Конструтор используется для создания объекта класса.

Смотрите иллюстрацию, инициализация объекта из конструктора.

 Инициализация объекта
java - джава - учиться java - учебник java -
Инициализация объекта
- примеры java - java-программы

3- Наследование в java

  • Нам нужные некоторые классы для участия в примере.
  • Animal: Класс симулирующий класс Животных.
  • Duck: Класс симулирующий класс утки, подкласс Animal.
  • Cat: Класс симулирующий класс кошки, подкласс Animal
  • Mouse: Класс симулирующий класс мышеи, подкласс Animal.
 create an object
java - джава - учиться java - учебник java -
Создание объекта
- примеры java - java-программы
  • Здесь у нас есть класс Animal, с методом без содержания.
  • public abstract String getAnimalName();
  • Это метод является абстрактным методом (abstract), в подклассах вм нужно объявить и применить его содержаине. Этот метод означает возврат названия животного.
  • Class Animal имеет 1 абстрактный метод, который нужно объявить как абстрактный (abstract). Абстрактный класс имеет конструктор (constructor), но вы не можете создать из него объект.
  • То есть вы хотите создать объект животного, вам нужно создать из определенного вида животного, в данном случе, вы должные создать из конструктора Cat, Mouse или Duck.

Animal.java

package org.wikitechy.tutorial.inheritance.animal;
 
// The class has at least one abstract method must be declared as abstract.
public abstract class Animal {
 
    // The Name, for example, Tom Cat, Jerry Mouse.
    private String name;
 
    // Default constructor.
    public Animal() {
        // Assign the default value to 'name'.
        this.name = this.getAnimalName();
    }
 
    public Animal(String name) {
        this.name = name;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    // This is an abstract method.
    // Returns the name of this animal.
    // The specific content of this method will be implemented in the subclass.
    public abstract String getAnimalName();
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда

Далее рассмотрим class Cat, унаследованный от Animal.

  • Cat also has constructor, and also has fields. In the first line of the constructor must call super(..), means that call to constructor of parent class, to assign value for fields of the parent class.
  • If you do not call call super(..), java auto insert super() into first line of constructor at compile time.

Cat.java

package org.wikitechy.tutorial.inheritance.animal;
 
public class Cat extends Animal {
 
    private int age;
    private int height;
 
    public Cat(int age, int height) {
        // Call the default Constructor of the parent class (Animal).
        // For the purpose of assigning values to fields of superclass.
        super();
        // Next, Assign values to its fields.
        this.age = age;
        this.height = height;
    }
 
    public Cat(String name, int age, int height) {
        // Call the default Constructor of the parent class (Animal)
        // For the purpose of assigning values to fields of superclass.
        super(name);
        // Next, Assign values to its fields.
        this.age = age;
        this.height = height;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    public int getHeight() {
        return height;
    }
 
    public void setHeight(int height) {
        this.height = height;
    }
 
    // Implement content for abstract method declared in the parent class.
    @Override
    public String getAnimalName() {
        return "Cat";
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда

Что происходит когда вы создаете объект Cat?

 Пример класса
java - джава - учиться java - учебник java -
Пример класса
- примеры java - java-программы

Смотрите class Mouse, унаследованный из Animal.

package org.wikitechy.tutorial.inheritance.animal;
 
public class Mouse extends Animal {
 
    private int weight;
 
    // Default constructor.
    public Mouse() {
        // Gọi tới cấu tử Mouse(int)
        // Call to constructor Mouse(int)
        this(100);
    }
 
    // The Constructor has one parameter.
    public Mouse(int weight) {
        // If you do not call any super (..).
        // Java will call a default super().
        // super();
        this.weight = weight;
    }
 
    // The Constructor has 2 parameters.
    public Mouse(String name, int weight) {
        super(name);
        this.weight = weight;
    }
 
    public int getWeight() {
        return weight;
    }
 
    public void setWeight(int weight) {
        this.weight = weight;
    }
 
    @Override
    public String getAnimalName() {
        return "Mouse";
    }
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда

InstanceofDemo.java

package org.wikitechy.tutorial.inheritance.demo;
 
import org.wikitechy.tutorial.inheritance.animal.Animal;
import org.wikitechy.tutorial.inheritance.animal.Cat;
import org.wikitechy.tutorial.inheritance.animal.Mouse;
 
public class InstanceofDemo {
 
    public static void main(String[] args) {
 
        // Create an Animal object.
        // Animal is abstract class,
        // you can not create an object from Animal's Constructor.
        Animal tom = new Cat("Tom", 3, 20);
 
        System.out.println("name: " + tom.getName());
        System.out.println("animalName: " + tom.getAnimalName());
 
        // Using 'instanceof' operator to
        // check if an object is an instance of a specific class.
        boolean isMouse = tom instanceof Mouse;
        System.out.println("Tom is mouse? " + isMouse);
 
        boolean isCat = tom instanceof Cat;
        System.out.println("Tom is cat? " + isCat);
 
        boolean isAnimal = tom instanceof Animal;
        System.out.println("Tom is animal? " + isAnimal);
 
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
  • Результаты запуска примера:
 javadoc-console
java - джава - учиться java - учебник java -
Javadoc консоли
- примеры java - java-программы

InheritMethodDemo.java

package org.wikitechy.tutorial.inheritance.demo;
 
import org.wikitechy.tutorial.inheritance.animal.Cat;
 
public class InheritMethodDemo {
 
    public static void main(String[] args) {
 
        // Create instance of Cat.
        Cat tom = new Cat("Tom", 3, 20);
 
        // Call the methods inherited from the parent class (Animal).
        System.out.println("name: " + tom.getName());
        System.out.println("animalName: " + tom.getAnimalName());
 
        System.out.println("-----------------");
 
        // Call the methods declared in the Cat class.
        System.out.println("Age: " + tom.getAge());
        System.out.println("Height: " + tom.getHeight());
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
  • Результаты запуска примера:
 inherit method demo
java - джава - учиться java - учебник java -
наследуют метод demo
- примеры java - java-программы

Casting in Java

package org.wikitechy.tutorial.inheritance.demo;
 
import java.util.Random;
 
import org.wikitechy.tutorial.inheritance.animal.Animal;
import org.wikitechy.tutorial.inheritance.animal.Cat;
import org.wikitechy.tutorial.inheritance.animal.Mouse;
 
public class CastDemo {
 
    // This method returns a random animal.
    public static Animal getRandomAnimal() {
        // Returns a random value 0 or 1.
        int random = new Random().nextInt(2);
 
        Animal animal = null;
        if (random == 0) {
            animal = new Cat("Tom", 3, 20);
        } else {
            animal = new Mouse("Jerry", 5);
        }
        return animal;
    }
 
    public static void main(String[] args) {
 
        Animal animal = getRandomAnimal();
 
        if (animal instanceof Cat) {
            // Cast to Cat
            Cat cat = (Cat) animal;
 
            // And call a method of the Cat class.
            System.out.println("Cat height: " + cat.getHeight());
        } else if (animal instanceof Mouse) {
            // Cast to Mouse.
            Mouse mouse = (Mouse) animal;
 
            // And call method of the Mouse class.
            System.out.println("Mouse weight: " + mouse.getWeight());
        }
 
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда

4- Полиморфизм в Java

  • У вас есть кошка азиатского происхождения (AsianCat), вы можете назвать ее кошкой (Cat) или сказать что это животное (Animal), это аспект в полиморфизме.
  • Или другой пример: В вашем резюме написано, что вы Азиат, когда на самом деле вы являетесь Вьетнамцем.
  • Пример ниже показывает вам как вести себя между объявлением и реальностью.
  • Class AsianCat это подкласс унаследованный от Cat.
package org.wikitechy.tutorial.inheritance.animal;
 
public class AsianCat extends Cat {
 
    public AsianCat(String name, int age, int height) {
        super(name, age, height);
    }
 
    // Override the method of the parent class (Cat)
    @Override
    public String getAnimalName() {
        return "Asian Cat";
    }
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
  • Полиморфизм в Java объясняется в иллюстрации ниже:
 example polymorhism
java - джава - учиться java - учебник java -
Пример polymorhism
- примеры java - java-программы
package org.wikitechy.tutorial.polymorphism;
 
import org.wikitechy.tutorial.inheritance.animal.AsianCat;
import org.wikitechy.tutorial.inheritance.animal.Cat;
 
public class PolymorphismDemo {
 
  public static void main(String[] args) {
 
      Cat cat1 = new Cat("Tom", 3, 20);
 
      Cat cat2 = new AsianCat("ATom", 2, 19);
 
      System.out.println("Animal Name of cat1: " + cat1.getAnimalName());
 
      System.out.println("Animal Name of cat2: " + cat2.getAnimalName());
 
  }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
  • Результаты запуска примера:
 polymorhism демо
java - джава - учиться java - учебник java -
polymorhism демо
- примеры java - java-программы

Related Searches to Наследование и полиморфизм в Java