일반화와 특수화(specialization))가 있습니다. 일반화는 개념에서 공통적인 개념을 찾아 정의하는 관계를 말합니다.
일반화의 관계는 A는 B의 일종이다
와 같은 관계를 말합니다.
일반적인 것을 상위에 특수한 개념을 하위 두는 방식을 상속성이라고 할 수 있습니다.
상속성을 통하여 객체의 계층성이 발생이 됩니다.
상속을 통하여 코드를 재사용 할 수 있습니다.
확장을 통하여 기존의 클래스에 새로운 기능을 추가 할 수 있습니다.
상속은 크게 구현상속
과 인터페이스 상속
으로 구분을 할 수 있습니다.
접근
상속을 받게 되는 접근할 수 속성이 있습니다. private
로 속성이 정해저 있는 경우 접근을 제한 받을 수 있습니다.
접근이 가능하기 위해서는 public
또는 protected
로 정의해야 합니다.
매서드 재정의를 할 수 있습니다.
많다(ploy) + 형태(morphism)의 결합니다.
다형성은 동적 바인딩을 처리 하게 됩니다.
따라서 코드가 실행시에 어떤 메서드가 호출이 되는지를 결정합니다.
다형성은 부모 클래스의 메서드가 자식 클래스에서 재정의 될 확율이 높을 경우 가상메서드를 처리합니다.
다향성을 처리하기 위해서 메소드 테이블을 가지게 됩니다. 이를 통하여 다양성 있는 코드를 생성할 수 있습니다.
다양성은 오버해드가 크다. 잘못된 의도의 결과가 출력될 수 있습니다.
class Bar
{
public function method1()
{
echo "method1 \n";
$this->method2();
}
public function method2()
{
echo "method2 \n";
}
}
class Foo extends Bar
{
public function method2()
{
echo "hello \n";
}
}
$obj = new Foo;
$obj->method1();
부모클레스 method1()
은 method2()
를 호출하여 결과를 출력할려고 했지만, 상속받은 자식이 method2()
오버라이딩을 통하여 method1()
이 처음에 워하는 메시지가 출력되지 안습니다.
다향성으로 인하여 결과가 다르게 나올 수도 있습니다.
다형성을 이해하는데 필요한 것이 추상클래스와 추상매서드 추상메서드는 매서드의 원형(prototype)만 제공합니다.
추상클래스는 직접 인스턴스를 생성을 할 수 없습니다. 구체적인 메서드의 내용이 없기 때문입니다.
UML에서 추상매소드와 추상클래스는 이텔릭체 형태로 기울어진 이름명으로 처리합니다.
다중상속이 가능하지만, 사용을 추천하지는 않습니다. 다중상속을 할 경우 여러 문제점이 발생될 수 있습니다.
다중상속이라는 것은 여러 부모클래스로 부터 상속이 이루어 지는 것을 말합니다.
하지만 그 부모의 클래스의 상위 조상이 공통된 경우에는 문제가 발생합니다.