언제 구현하고 확장해야합니까?
- 때해야
implement
또는extend
사용? - 실제 사례는 무엇입니까?
이 올바른지?
구현 은 특정 메서드가 클래스에 존재하고 이러한 메서드 함수 호출의 형식이 적절하게 지정되도록하는 방법으로 보입니다. 구현은 변수 나 "설정"을 클래스에 전달하는 방법 이 아닙니다 .
예상되는 실제 시나리오 : 동일한 디자인을 따르는 여러 결제 클래스를 갖춘 전자 상거래 플랫폼이 있습니다. 새로운 지불 클래스를 추가해야 할 때 interface
처음부터 모든 비트와 조각이 있는지 확인하기 위해 의 정의 된 디자인을 따르는 것이 정말 쉽습니다 .
클래스를 확장 하면 확장 (자식?) 클래스가 private
?로 선언 된 메서드 및 변수를 제외하고 부모 클래스의 모든 것을 상속받습니다 .
예상되는 실제 시나리오 : 및 sessions
이라는 두 개의 하위 클래스로 호출 된 하나의 클래스가 있습니다 . 그리고 , 부모 세션에서 여러 상호 구성 옵션을 상속하여 모든 종류의 최종 방문자 데이터 스토리지에 영향을 미치는 구성 옵션을 쉽게 변경할 수 있습니다.sessioncookies
databasesessions
sessioncookies
databasesessions
상속은 다시 작성하는 코드의 양을 줄이는 데 유용합니다. 몇 가지 공통 메서드 또는 필드가있는 여러 클래스가있는 경우 이러한 메서드와 필드를 반복해서 정의하는 대신 기본 클래스로 팩터링하고 각 자식 클래스가 해당 기본 클래스를 확장하도록 할 수 있습니다.
인터페이스 (및 implements
)는 개체 그룹의 동작 방식에 대한 공통 프로토콜 을 정의하려는 경우 유용 합니다. 예를 들어, 비교할 수있는 객체가 동등성 및 해시 등을 위해 비교 될 수 있도록 명령 할 수 있습니다.
상속을 사용하는 것은 궁극적으로 디자인 선택입니다. 여러 클래스에서 동일한 메소드를 정의하는 경우를주의하십시오. 이러한 메서드를 기본 클래스로 분리 할 수있는 훌륭한 사례입니다. 동일한 특성 중 일부를 관찰하는 클래스도 마찬가지입니다. 이러한 특성을 관련 클래스에서 구현할 인터페이스에 배치하여 일관성을 보장 할 수 있습니다.
상속은 PHP를 넘어서는 OOP의 큰 개념입니다. 상속에 관한 위키피디아 기사 와 Gang of Four의 디자인 패턴 을 읽어 보는 것이 좋습니다 .
나는 상속에 대한 당신의 이해가 주로 정확하다고 믿습니다. 다음 단계는 프로덕션에서 사용하는 것입니다.
도구:
인터페이스는 추상 클래스이므로 선언 만 할 수 있습니다. 구현은 인터페이스를 구현하는 것입니다! 여러 인터페이스 를 구현할 수 있습니다.
넓히다:
당신은 확장 이 클래스의보다 구체적인 버전을 할 때 클래스를.
예:
abstract class Animal {
private String name;
public void eat();
public void sleep();
}
public interface Pet {
public void play();
}
public class Dog extends Animal implements Pet {
public void eat() {
// do stuff
}
public void sleep() {
// do stuff
}
public void play() {
// do stuff
}
}
public class Hippo extends Animal {
public void eat() {
// do stuff
}
public void sleep() {
// do stuff
}
}
Hippo와 Dog는 둘 다 동물이기 때문에 Animal을 확장합니다. 하지만 개만이 애완 동물이 될 수 있습니다!
참고 URL : https://stackoverflow.com/questions/4961906/when-to-implement-and-extend
'Programing' 카테고리의 다른 글
: 터치 CSS 의사 클래스 또는 비슷한 것? (0) | 2020.10.13 |
---|---|
Homebrew를 어떻게 업데이트합니까? (0) | 2020.10.13 |
Authorization HTTP 헤더 사용자 지정 (0) | 2020.10.13 |
C ++에서 객체를 어떻게 직렬화합니까? (0) | 2020.10.13 |
R 및 객체 지향 프로그래밍 (0) | 2020.10.13 |