찾다

 >  Q&A  >  본문

php - 부모 클래스 속성과 메서드를 재정의하는 하위 클래스가 부모 클래스 속성과 메서드를 재정의하지 않는 이유는 무엇입니까?

1. 상속은 참조로 전달되므로 하위 클래스가 상위 클래스의 속성과 메서드를 재정의하여 상위 클래스의 속성과 메서드를 변경하지 않는 이유는 무엇입니까? 상속된 참조 전송은 어떤 상황에서 상위 클래스의 멤버 메서드와 멤버 속성이 변경됩니까?

2. 정적 속성, 메서드 및 상수는 정적 영역에 있는데 하위 클래스에서 다시 작성해도 원래 속성과 변수가 여전히 덮어쓰여지지 않는 이유는 무엇입니까?

3. 새로 편집된 질문 - 정적 영역에 대한 - 객체 객체에는 멤버 변수만 있고, 힙에 있는 멤버 메서드의 주소만 있고, 멤버 메서드 및 클래스가 코드 영역에 있다는 것은 누구나 알고 있습니다. 및 정적 멤버 메서드는 멤버 메서드와 다릅니다. 정적 멤버 메서드는 정적 영역에 있습니다. obj->정적 멤버 변수는 오류를 보고하지만 obj->정적 멤버 메서드는 성공적으로 호출될 수 있습니다. 왜 그렇습니까? 코드 영역, 정적 영역 및 개체 간의 관계에 대해 알려주실 수 있나요? ! ! ! !

PHP中文网PHP中文网2751일 전1095

모든 응답(8)나는 대답할 것이다

  • 滿天的星座

    滿天的星座2017-05-16 13:13:34

    위 답변 중 어느 것도 요점에 부합하지 않습니다. Baidu 직접: 후기 바인딩 및 초기 바인딩, 상속 및 다형성에 대한 tij의 지식도 살펴보세요

    회신하다
    0
  • 漂亮男人

    漂亮男人2017-05-16 13:13:34

    이런 식으로 이해하려고 하면 상속은 참조로 전달되고, 하위 클래스는 상속된 부모 클래스이고, 부모 클래스의 속성과 메서드는 상위 클래스의 모든 속성과 메서드가 메모리에 있어야 합니다.
    그러나 하위 클래스에서 상위 클래스의 메서드를 재정의하는 것은 실제로 포인터를 상위 클래스의 a() 메서드에서 하위 클래스의 재정의된 a()로 이동하는 것과 같습니다. )는 여전히 존재하지만 실제로는 메모리에서 상위 클래스의 a() 메서드를 대체합니다.

    상속된 참조 전달: 메모리에 상위 클래스 코드의 복사본이 하나만 있음을 의미합니다. 예를 들어 메모리 주소는 0x000010입니다. 하위 클래스가 상속되면 이 메모리 주소에서 상위 클래스의 코드를 직접 읽습니다. 코드를 메모리에 다시 복사하는 대신.

    회신하다
    0
  • 仅有的幸福

    仅有的幸福2017-05-16 13:13:34

    동적 바인딩 메커니즘을 살펴볼 수 있습니다. 하위 클래스와 상위 클래스는 메서드 영역에서 두 개의 별도 메서드 테이블과 각 데이터 유형을 형성합니다. . . 다루지 않습니다

    회신하다
    0
  • 漂亮男人

    漂亮男人2017-05-16 13:13:34

    상속에 대한 개인적인 이해:
    상위 클래스가 이미 가지고 있는 메서드, 상위 클래스를 상속하는 하위 클래스는 기본적으로 해당 메서드(메서드 및 속성)를 갖습니다. 그러나 하위 클래스는 상위 클래스의 메서드를 재정의하도록 선택할 수 있습니다. 이 경우 하위 클래스가 재정의된 메서드를 호출하면 하위 클래스가 메서드를 수정하지 않는 경우 해당 메서드를 호출하는 데 우선 순위가 부여됩니다. 기본적으로 상위 클래스의 메소드가 호출됩니다.
    포스터에서 참조에 의한 상속에 관해 말한 내용에 대해 개인적으로 상속할 때 이러한 메서드와 속성은 기본적으로 상위 클래스를 가리킨다고 생각합니다. 그러나 실제로 호출하면 하위 클래스가 메서드나 속성을 재정의했는지 여부를 감지합니다. 존재하는 경우 실제 호출은 하위 클래스에 의해 재정의된 메서드와 속성을 가리킵니다. 그렇지 않은 경우에도 여전히 상위 클래스의 메서드와 속성을 가리킵니다.
    개인적인 겸허한 의견...

    회신하다
    0
  • 迷茫

    迷茫2017-05-16 13:13:34

    하위 클래스는 상속된 상위 클래스입니다. 하위 클래스는 상위 클래스의 속성과 메서드를 상속받을 수 있지만 하위 클래스는 하나의 상위 클래스만 가질 수 있지만 하위 클래스는 여러 개의 하위 클래스를 가질 수 있습니다. 부모를 변경합니다. 클래스 자체의 속성과 메서드는 새로운 메서드와 속성을 다시 상속해야 하지 않나요? 해결책이 없습니다. . .

    회신하다
    0
  • 高洛峰

    高洛峰2017-05-16 13:13:34

    하위 클래스는 상위 클래스만 재정의할 수 있습니다. 코드는 먼저 하위 클래스의 메서드를 실행하고 더 이상 상위 클래스의 재정의된 메서드를 계속 실행하지 않습니다.

    회신하다
    0
  • PHPz

    PHPz2017-05-16 13:13:34

    PHP 언어의 상속은 높은 수준에서 낮은 수준으로만 상속될 수 있으며 그 반대로 재정의될 수 없습니다.

    회신하다
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-16 13:13:34

    부모 클래스의 메서드를 상속받습니다. 이는 부모 클래스의 모든 메서드를 내 클래스에 작성하는 것과 같습니다. 기존 메서드와 충돌하는 메서드는 작성하지 않습니다. 즉, 상위 클래스가 있으면 상속받게 되고, 상위 클래스가 있으면 당신도 가지게 되므로 당신을 기준으로 삼게 됩니다.

    회신하다
    0
  • 취소회신하다