먼저 Polymorphism은 그리스어 Poly(많은 의미)와 morphism(형태를 의미)의 합성어입니다.
다형성은 유사한 작업을 수행하는 다양한 클래스의 메서드가 유사한 이름을 가져야 하는 객체 지향 프로그래밍의 예를 나타냅니다. 다형성은 본질적으로 다른 기능을 가진 수많은 클래스가 commonInterface를 실행하거나 공유할 수 있도록 하는 OOP 패턴입니다. 다형성의 유용성은 다른 클래스로 작성된 코드가 같은 방식으로 사용되기 때문에 그것이 속한 클래스에 아무런 영향을 미치지 않는다는 것입니다. 클래스가 다형성 지침을 구현하는지 확인하기 위해 추상 클래스 또는 인터페이스의 두 가지 대안 중 하나를 선택할 수 있습니다.
인터페이스의 도움으로 다형성 원리를 구현해 봅시다.
인터페이스 인터페이스는 코드를 포함할 수 없다는 점을 제외하고는 클래스와 유사합니다. 인터페이스는 메서드 이름과 인수를 정의할 수 있지만 메서드의 내용은 정의할 수 없습니다. 인터페이스를 실행하는 모든 클래스는 인터페이스가 특징인 모든 메소드를 실행해야 합니다.
예:
<?php interface Machine { public function calcTask(); } class Circle implements Machine { private $radius; public function __construct($radius){ $this -> radius = $radius; } public function calcTask(){ return $this -> radius * $this -> radius * pi(); } } class Rectangle implements Machine { private $width; private $height; public function __construct($width, $height){ $this -> width = $width; $this -> height = $height; } public function calcTask(){ return $this -> width * $this -> height; } } $mycirc = new Circle(3); $myrect = new Rectangle(3,4); echo $mycirc->calcTask(); echo $myrect->calcTask(); ?>
출력:
28.274 12
설명:
" Machine"이라는 이름의 인터페이스는 calcTask()라는 이름의 추상 메서드를 정의하기 위해 이를 구현하는 모든 클래스를 커밋합니다. 이에 따라 Circle 클래스는 내부에 해당 본문이 있는 callTask() 메서드를 정의하여 인터페이스를 구현합니다. 사각형 클래스는 Machine 인터페이스도 구현하지만 circle 클래스 CalTask() 메서드와 다른 본문으로 calcTask() 메서드를 정의합니다. 다형성 지침에 따르면 이 상황에서 작업을 계산하는 모든 메서드는 동일한 이름을 갖습니다. 이제 다른 클래스에 대한 작업을 계산해야 하는 시점에 관계없이 실제로 다른 기계에 대한 작업을 계산하는 방법에 대한 세부 사항을 많이 고려하지 않고 calcTask()라는 이름의 메서드를 호출합니다. 우리가 알아야 할 가장 중요한 것은 Task를 계산하는 메소드의 이름입니다.