1. 하지만 그게 다가 아닙니다.
클래스에 두 개의 다른 메서드를 호출하는 메서드가 Cow
있다고 가정합니다 . printAll()
그러면 코드는 다음과 같이 작동합니다.
암호 | 설명 |
---|---|
|
|
|
화면 출력은 다음과 같습니다.
|
printAll()
클래스 의 메서드가 객체 에 대해Cow
호출될 때 메서드 의 메서드 가 아닌 클래스의 메서드가 사용된다는 점에 유의하십시오 .Whale
printName
Whale
Cow
중요한 것은 메서드가 작성된 클래스가 아니라 메서드가 호출되는 객체의 유형(클래스)입니다.
비정적 메서드만 상속 및 재정의할 수 있습니다. 정적 메서드는 상속되지 않으므로 재정의할 수 없습니다.
다음은 Whale
상속 및 메서드 재정의를 적용한 후의 클래스 모습입니다.
|
다음은 Whale 상속 및 메서드 재정의를 적용한 후의 클래스 모습입니다. 이전 메서드에 대해 알지 못합니다 printName . |
2. 타입캐스팅
여기에 더 흥미로운 점이 있습니다. 클래스는 부모 클래스의 모든 메서드와 데이터를 상속하기 때문에 자식 클래스의 개체에 대한 참조는 부모 클래스 (및 부모의 부모 등 )와 유형이 동일한 변수에 저장(할당)될 수 있습니다. 수업까지 Object
). 예:
암호 | 설명 |
---|---|
|
화면 출력은 다음과 같습니다.
|
|
화면 출력은 다음과 같습니다.
|
|
화면 출력은 다음과 같습니다.
메서드 는 클래스 toString() 에서 상속됩니다.Object |
이것은 매우 귀중한 속성입니다. 조금 후에 실제로 사용하는 방법을 이해하게 될 것입니다.
3. 객체에 대한 메서드 호출
메서드가 변수에 대해 호출되면 메서드는 실제로 개체에 대해 호출됩니다. 이 메커니즘을 동적 메서드 디스패치라고 합니다.
다음과 같이 표시됩니다.
암호 | 설명 |
---|---|
|
화면 출력은 다음과 같습니다.
|
|
화면 출력은 다음과 같습니다.
|
호출되는 메서드 의 특정 구현 printName()
( 에 있는 메서드 Cow
또는 클래스에 있는 메서드 Whale
) 은 변수의 유형이 아니라 변수가 참조하는 개체의 유형에 따라 결정됩니다.
변수 는 개체 Cow
에 대한 참조를 저장 Whale
하고 클래스 printName()
에 정의된 메서드가 Whale
호출됩니다.
이것은 그다지 명백하지 않습니다. 기본 규칙을 기억하십시오.
변수에 대해 호출할 수 있는 메서드 집합은 변수 유형에 따라 결정됩니다. 그리고 호출되는 특정 메소드 구현은 변수가 참조하는 객체의 유형/클래스에 의해 결정됩니다.
당신은 이것을 항상 접하게 될 것이므로 이것을 기억하는 것이 빠를수록 좋습니다.
GO TO FULL VERSION