오버로딩: 이름은 같지만 메서드 이름은 같지만 매개변수가 다른 여러 함수
참고: 1. 매개변수가 다르다는 것은 매개변수 유형, 매개변수 수 및 매개변수 순서에 최소한 하나의 차이가 있음을 의미합니다.
2. 반환 값, 예외 및 액세스 한정자는 오버로드 조건으로 사용할 수 없습니다. (익명 호출의 경우 모호성이 발생하기 때문입니다. 예: void a() 및 int a(), a()가 호출되면 모호성이 발생합니다)
3. 주요 메서드도 오버로드될 수 있습니다.
재정의: 하위 클래스는 상위 클래스의 메소드를 다시 작성하며, 메소드 이름과 매개변수 유형이 정확히 동일해야 하고(매개변수는 하위 클래스일 수 없음) 반환 값과 예외가 상위 클래스의 메소드와 동일하거나 더 작도록 요구합니다. 즉, 상위 클래스의 하위 클래스입니다. 액세스 수정자는 상위 클래스의 하위 클래스보다 작습니다. 상위 클래스는 더 크거나 같습니다.
같은 것 2개, 작은 것 2개, 큰 것 1개
참고: 하위 클래스 인스턴스 메서드는 상위 클래스 정적 메서드를 재정의할 수 없습니다. 하위 클래스 정적 메서드는 상위 클래스 인스턴스 메서드를 재정의할 수 없습니다(컴파일 중에 오류가 발생함).
Hidden: 상위 클래스와 하위 클래스에 이름이 같은 속성이나 메서드가 있는 경우 이름이 같은 상위 클래스의 속성이나 메서드가 형식에서는 누락되지만 실제로는 여전히 존재합니다.
참고: 숨김이 발생하면 선언 유형이 무엇이든 해당 클래스의 속성이나 메서드가 호출되며 동적 바인딩이 발생하지 않습니다.
메서드 숨기기에는 한 가지 형태만 있습니다. 즉, 동일한 정적 메서드가 상위 클래스와 하위 클래스에 존재합니다.
속성은 숨길 수만 있고 덮어쓸 수는 없습니다.
하위 클래스 인스턴스 변수/정적 변수는 상위 클래스의 인스턴스/정적 변수를 숨길 수 있습니다. 요약하면 변수는 교차 숨김이 가능합니다.
숨기는 것과 덮는 것의 차이점:
숨겨진 속성은 하위 클래스가 상위 클래스로 강제 변환된 후 상위 클래스의 속성에 액세스됩니다.
재정의된 메서드는 하위 클래스가 강제로 상위 클래스로 변환된 후에도 여전히 하위 클래스 자체의 메서드를 호출합니다.
적용 범위는 동적으로 바인딩되고 RTTI(런타임 유형 식별, 런타임 유형 검사)의 적용을 받기 때문에 숨김은 RTTI의 적용을 받지 않습니다. 요약하면 RTTI는 숨김을 위한 것이 아니라 적용 범위에만 적용됩니다.
특별한 상황:
1. final로 수정된 속성은 숨길 수 있지만 할당할 수 없습니다. 즉, 온라인에서 final 속성을 수정할 수 없다고 합니다. 이 설명은 참조 유형 변수 이후에 정확하지 않습니다. final로 수정될 수는 있지만 다른 객체를 가리킬 수는 있지만 자체 값은 변경할 수 있습니다. ArrayList로 테스트할 수 있습니다. final 속성은 런타임에 초기화될 수 있지만 초기화 문이 나타나야 합니다.
2. 최종 수정된 메서드는 재정의될 수 없으며 오버로드될 수 있습니다.
3. 최종 수정된 클래스는 상속될 수 없습니다.
4. private 메소드는 암시적으로 final을 추가합니다.