PHP

상속 - 상속금지 (final)

수업소개

경우에 따라서는 메소드나 클래스에 대해서 상속을 못하도록 금지해야 할 때가 있습니다. 이런 경우 final 키워드를 사용하면 됩니다. 

내용추가 : 상속을 금지하는 것이 아니라 부모 클래스를 자식 클래스가 덮어쓰기하는 것(override)을 금지하는 것이 정확한 표현이겠네요. 혼란을 드려서 죄송합니다!

수업

코드

<?php
final class ParentClass{
  function a(){
    echo 'Parent';
  }
  function b(){
    echo 'Parent B';
  }
}
class ChildClass extends ParentClass{
  function a(){
    echo 'Child';
  }
  function b(){
    echo 'Child B';
  }
}
$obj = new ChildClass();
$obj->a();
?>

 

댓글

댓글 본문
작성자
비밀번호
  1. dufuqsls
    자로밨습니다.
  2. 고맙습니다~
  3. egoing
    예 그렇습니다! 엄청 똑똑하십니다 ^^
    대화보기
    • 헉 답변 감사합니다! 그럼, 메소드 옆에 final이 붙은건 오버라이드만 안되고 상속받아서 쓸수는 있는거죠?

      (글수정합니다!)
      http://php.net......php
      메소드 정의가 마지막이란뜻같네여,,
      대화보기
      • egoing
        제가 용어를 헷갈리게 사용했네요. final은 끙님의 말씀처럼 함수를 오버라이드 못하게 하는 것입니다. 상속을 못하게 하는 것이 아니라고 할 수 있네요. 보강이 필요해보입니다! 지적 감사합니다~
        대화보기
        • 이고잉님! final이 상속을 금지한다고 하셨는데 그럼,, 상속받은 자식클래스의 객체는 부모의 final 함수를 못쓰는거 아닌가요?
          실행결과 final함수는 오버라이드만 안되고, 오버라이드를 하지않으면 부모의 final 함수는 자식클래스의 객체에서 불러들일 수 있던데,,뭐가뭐죠,,?ㅠㅠㅠㅠ class자체를 final하면 상속을 아예못받아서 자식클래스객체는 아예못쓰던데,,, 흡 헷갈립니다 ㅠㅠ
        • egoing
          앗 그래야겠네요. 저도 습관대로 코딩하는게 익숙해서 ^^
          뒤에서 psr이나 php coding standard fixer 사용법도 다루겠습니다!
          대화보기
          • 객체지향 개념을 익히는 것이 주제이긴하지만.. 그럼에도 이 시리즈을 보고 언어를 배우게 되는 사람들을 위해 PSR-2 Please~
          버전 관리
          egoing
          현재 버전
          선택 버전
          graphittie 자세히 보기