Java → Полиморфизм в JAVA
Полиморфизм в java это один из самых нужных принципов в java. Я конечно не хочу сказать что все остальное отстой и не нужно, наоборот все нужно и без основ у Вас не получится создать что-то большое и работающее без багов)
Полиморфизм – это способность программы идентично использовать объекты с одинаковым интерфейсом без информации о конкретном типе этого объекта. Короче или еще проще говоря полиморфизм это когда у нас есть один интерфейс и множество реализаций. Что это такое в реальном мире? Это можно представить как "Животное" которое умеет как-то передвигаться) - это наш интерфейс(Животное может передвигаться). А для конкретных видов передвижение реализовано по разному. Кто-то ходит на четырех а кто-то ходит на двух и тд. Передвижение для каждого вида - это конкретные реализации.
Вот так вот) Ну это еще не всё...
Давайте рассмотрим полиморфизм на реальном примере:
Давайте разберем этот код, есть базовый класс Animal и в этом классе объявлен метод move, он абстрактный - это значит что этот метод должен быть реализован в классах наследниках. Все очень логично))) Есть dog который бегает на четырех лапах. В классе dog реализован метод для передвижения в соответствующий передвижению собаки) Как-бы-то))) Еще есть кенгуру которое не ходит как собака и вообще кенгуру прыгает, и в классе Kangaroo реализовано, то как кенгуру передвигается(ну приблизительно).
То есть есть метод move общий для всех, но реализованный по разному в соответствии с особенностями того или иного вида. Вот вам и полиморфизм)))
Давайте глянем как же с этим работать:
Как видим с кода, мы создаем через new экземпляр класса Dog и Kangaroo и присваиваем их переменным типа Animal. Благодаря полиморфизму у нас в консоль печатает надписи соответствующие конкретному животному. Как же это работает? Все очень просто мы ограничиваем видимости для dog and kangaroo, мы не сможем обратится к полям и методам которые объявлены в Dog и Kangaroo, Но адрес в памяти нашей ссылки указывает на объекты Dog и Kangaroo. А раз в памяти это все равно классы наследники, то поэтому и вызывается метод не суперкласса а классов наследников. ВОТ ТАК ВОТ!!!
Еще что может запутать так это полиморфизм и поля класса) ПОЛИМОРФИЗМ ДЕЙСТВУЕТ ТОЛЬКО ДЛЯ МЕТОДОВ, ПОЛЯ НЕ ПОЛИМОРФНЫЕ. Это значит:
Как можно увидеть поля принадлежат объекту конкретного типа. Поэтому их нельзя переопределить, они перезаписываются полями в классах наследниках.
ВОТ ТЕПЕРЬ ВСЕ, пишите мне в telegram: @javavirys или пишите на почту javavirys@gmail.com или звоните в рельсу))))
Полиморфизм – это способность программы идентично использовать объекты с одинаковым интерфейсом без информации о конкретном типе этого объекта. Короче или еще проще говоря полиморфизм это когда у нас есть один интерфейс и множество реализаций. Что это такое в реальном мире? Это можно представить как "Животное" которое умеет как-то передвигаться) - это наш интерфейс(Животное может передвигаться). А для конкретных видов передвижение реализовано по разному. Кто-то ходит на четырех а кто-то ходит на двух и тд. Передвижение для каждого вида - это конкретные реализации.
Вот так вот) Ну это еще не всё...
Давайте рассмотрим полиморфизм на реальном примере:
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 реализован метод для передвижения в соответствующий передвижению собаки) Как-бы-то))) Еще есть кенгуру которое не ходит как собака и вообще кенгуру прыгает, и в классе 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 )
Теги:
Просмотров: 583