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. 24.01.07 final
  2. 드림보이
    2022.01.25. 상속 - 상속금지 (final) 파트 수강완료
  3. jeisyoon
    2021.08.10 Inheritance(Final) - OK
  4. 웅이
    강의 내용에서 이고잉님은 $obj->a();를 $obj->b();로 바꾸는게 없어서
    둘다 해보니까 둘다 각각 Child, Parent B 로 값이 나오는데
    왜 되버리는거죠...? 이게 되면 안되는데...
  5. rnt
  6. dufuqsls
    자로밨습니다.
  7. egoing
    예 그렇습니다! 엄청 똑똑하십니다 ^^
    대화보기
    • egoing
      제가 용어를 헷갈리게 사용했네요. final은 끙님의 말씀처럼 함수를 오버라이드 못하게 하는 것입니다. 상속을 못하게 하는 것이 아니라고 할 수 있네요. 보강이 필요해보입니다! 지적 감사합니다~
      대화보기
      • 이고잉님! final이 상속을 금지한다고 하셨는데 그럼,, 상속받은 자식클래스의 객체는 부모의 final 함수를 못쓰는거 아닌가요?
        실행결과 final함수는 오버라이드만 안되고, 오버라이드를 하지않으면 부모의 final 함수는 자식클래스의 객체에서 불러들일 수 있던데,,뭐가뭐죠,,?ㅠㅠㅠㅠ class자체를 final하면 상속을 아예못받아서 자식클래스객체는 아예못쓰던데,,, 흡 헷갈립니다 ㅠㅠ
      • egoing
        앗 그래야겠네요. 저도 습관대로 코딩하는게 익숙해서 ^^
        뒤에서 psr이나 php coding standard fixer 사용법도 다루겠습니다!
        대화보기
        • appkr
          객체지향 개념을 익히는 것이 주제이긴하지만.. 그럼에도 이 시리즈을 보고 언어를 배우게 되는 사람들을 위해 PSR-2 Please~
        버전 관리
        egoing
        현재 버전
        선택 버전
        graphittie 자세히 보기