Что такое полиморфный метод в Java? - PullRequest
6 голосов
/ 05 января 2011

Я изучаю язык Java для теста SCJP.

Немного сложно понять "полиморфный метод".

Не могли бы вы объяснить это для меня? или дайте мне несколько ссылок?

Ответы [ 5 ]

19 голосов
/ 05 января 2011

«Полиморфный» означает «много форм».В Java вы можете иметь суперкласс с подклассами, которые делают разные вещи, используя одно и то же имя.Традиционный пример - суперкласс Shape, с подклассами Circle, Square и Rectangle и методом area().

Так, например,

// note code is abbreviated, this is just for explanation
class Shape {
    public int area();  // no implementation, this is abstract
}

class Circle {
    private int radius;
    public Circle(int r){ radius = r ; }
    public int area(){ return Math.PI*radius*radius ; }
}

class Square {
    private int wid;
    Public Square(int w){ wid=w; }
    public int area() { return wid*wid; }
}

Сейчасрассмотрим пример

Shape s[] = new Shape[2];

s[0] = new Circle(10);
s[1] = new Square(10);

System.out.println("Area of s[0] "+s[0].area());
System.out.println("Area of s[1] "+s[1].area());

s[0].area() звонки Circle.area(), s[1].area() звонки Square.area() - и поэтому мы говорим, что Shape и его подклассы используют полиморфные вызовы области метода.

6 голосов
/ 05 января 2011

Ответ Чарли объясняет простыми словами, что такое полиморфизм.

Если продолжить, то это будет "полиморфный метод":

public void Shape CreateShape() {
    return new Circle(10);
}

Это «полиморфный» в том смысле, что его подпись говорит о том, что вы получаете Shape, но то, что вы действительно получаете, является подклассом Shape. Поскольку вы не знаете точно, что вы получаете (это может быть Circle, Square и т. Д.), Вы должны обрабатывать его, используя интерфейс суперкласса (то есть полиморфизм).

Я должен упомянуть, что (возможно, потому что у меня только небольшой опыт работы с Java) "полиморфный метод" - это незнакомый термин, поэтому его можно использовать для обозначения чего-то другого. Это только моя интерпретация.

0 голосов
/ 05 июня 2018

Полиморфный метод - это метод, который может принимать много форм . Под этим я подразумеваю, что метод может в разное время вызывать разные методы.

Допустим, у вас есть class Animal и class Dog extends Animal и class Cat extends Animal, и все они переопределяют метод sleep()

Тогда ..

animal.sleep();

.. может вызывать разные методы в зависимости от динамического типа, хранящегося в переменной animal

0 голосов
/ 09 июня 2016

Метод является полиморфным для сигнатуры, если выполняются все следующие условия:

Он объявлен в классе java.lang.invoke.MethodHandle.

Он имеет единственный формальный параметр типаObject [].

Имеет тип возвращаемого значения Object.

У него установлены флаги ACC_VARARGS и ACC_NATIVE.

В Java SE 8 единственными полиморфными методами сигнатуры являются:методы invoke и invokeExact класса java.lang.invoke.MethodHandle.

Спецификация JVM 2.9.Специальные методы

0 голосов
/ 26 марта 2016

Полиморфизм - это процесс представления «одной формы во многих формах».

Это не концепция программирования, а один из принципов.

Example 1 :

class A
{
 void print(double d)
 {
  System.out.println("Inside Double");
 }
 void print(float f)
 {
  System.out.println("Inside Float");
 }
}
class B
{
 public static void main(String [ ] args)
 {
  A obj1 = new A();
  obj1.print(10.0);
 }
}


Output :

//save as : B.java
//compile as :javac B.java
//run as : java B

Inside Double

______________________


Example 2 :

class A
{
 void print(double d)
 {
  System.out.println("Inside Double");
 }
 void print(float f)
 {
  System.out.println("Inside Float");
 }
}
class B
{
 public static void main(String [ ] args)
 {
  A obj1 = new A();
  obj1.print(10.0f);
 }
}


Output :

//save as : B.java
//compile as :javac B.java
//run as : java B

Inside Float

_______________________

Example 3 :

class A
{
 void print(double d)
 {
  System.out.println("Inside Double");
 }
 void print(float f)
 {
  System.out.println("Inside Float");
 }
}
class B
{
 public static void main(String [ ] args)
 {
  A obj1 = new A();
  obj1.print(10);
 }
}


Output :

//save as : B.java
//compile as :javac B.java
//run as : java B

Inside Float

Чтобы узнать больше - http://algovalley.com/java/polymorphism.php

...