Java → Полиморфизм в JAVA

Полиморфизм в java это один из самых нужных принципов в java. Я конечно не хочу сказать что все остальное отстой и не нужно, наоборот все нужно и без основ у Вас не получится создать что-то большое и работающее без багов)

Полиморфизм – это способность программы идентично использовать объекты с одинаковым интерфейсом без информации о конкретном типе этого объекта. Короче или еще проще говоря полиморфизм это когда у нас есть один интерфейс и множество реализаций. Что это такое в реальном мире? Это можно представить как "Животное" которое умеет как-то передвигаться) - это наш интерфейс(Животное может передвигаться). А для конкретных видов передвижение реализовано по разному. Кто-то ходит на четырех а кто-то ходит на двух и тд. Передвижение для каждого вида - это конкретные реализации.
Вот так вот) Ну это еще не всё...

Давайте рассмотрим полиморфизм на реальном примере:


package srcblog.ru;

public abstract class Animal {

public abstract void move()
}



package srcblog.ru;

public class Dog extends Animal{

@Override
public void move() {
System.out.println("Walks on four legs");
}
}



package srcblog.ru;

public class Kangaroo extends Animal{

@Override
public void move() {
System.out.println("Jumping on two legs");
}
}


Давайте разберем этот код, есть базовый класс Animal и в этом классе объявлен метод move, он абстрактный - это значит что этот метод должен быть реализован в классах наследниках. Все очень логично))) Есть dog который бегает на четырех лапах. В классе dog реализован метод для передвижения в соответствующий передвижению собаки) Как-бы-то))) Еще есть кенгуру которое не ходит как собакаsmile.gif и вообще кенгуру прыгает, и в классе Kangaroo реализовано, то как кенгуру передвигается(ну приблизительно).
То есть есть метод move общий для всех, но реализованный по разному в соответствии с особенностями того или иного вида. Вот вам и полиморфизм)))
Давайте глянем как же с этим работать:


public class Main {

public static void main(String[] args) {
Animal dog = new Dog();
dog.move(); // print: "Walks on four legs"

Animal kangaroo = new Kangaroo();
kangaroo.move(); // print: "Jumping on two legs"
}
}


Как видим с кода, мы создаем через new экземпляр класса Dog и Kangaroo и присваиваем их переменным типа Animal. Благодаря полиморфизму у нас в консоль печатает надписи соответствующие конкретному животному. Как же это работает? Все очень просто мы ограничиваем видимости для dog and kangaroo, мы не сможем обратится к полям и методам которые объявлены в Dog и Kangaroo, Но адрес в памяти нашей ссылки указывает на объекты Dog и Kangaroo. А раз в памяти это все равно классы наследники, то поэтому и вызывается метод не суперкласса а классов наследников. ВОТ ТАК ВОТ!!!

Еще что может запутать так это полиморфизм и поля класса) ПОЛИМОРФИЗМ ДЕЙСТВУЕТ ТОЛЬКО ДЛЯ МЕТОДОВ, ПОЛЯ НЕ ПОЛИМОРФНЫЕ. Это значит:

public abstract class Animal {

public int weight = 0;

public void move() {
System.out.println("Somehow walks");
}
}

public class Dog extends Animal{

public int weight = 10;

@Override
public void move() {
System.out.println("Walks on four legs");
}
}

public class Main {

public static void main(String[] args) {
Animal dog = new Dog();
System.out.println("weight: " + dog.weight); // print: "weight: 0"

Dog dog1 = new Dog()
System.out.println("weight: " + dog1.weight); // print: "weight: 10"
}
}


Как можно увидеть поля принадлежат объекту конкретного типа. Поэтому их нельзя переопределить, они перезаписываются полями в классах наследниках.
ВОТ ТЕПЕРЬ ВСЕ, пишите мне в telegram: @javavirys или пишите на почту javavirys@gmail.com или звоните в рельсу))))
Добавил: javavirys ( 2019-08-16 17:40:03 )
Теги:JAVA OOP polimorfism
Рейтинг: + 1 -
Просмотров: 578

Специальные предложения