바인딩 : 클래스의컴파일 시간과 실행 시간을 내 이해에 따르면 메소드 오버로딩과 오버 라이딩
, 개인 최종 정적 메서드는 컴파일 시간에 결정 호출되는 방법 바인딩 시간 즉 컴파일하십시오.
그러나 비공개 인스턴스 메서드 호출은 런타임에 결정됩니다.
내 모든 문제를 해결하는 데 사용됩니다. 그러나, 나는 위의 진술이 올바른 결과를 도출하지 못하는 몇 가지 문제에 갇혀있다. 그것은주고있다
class Item
{
Integer size;
Item(Integer size)
{
this.size=size;
}
public boolean equals(Item item2) //not overriding the method of Object class
{
if(this==item2)
return true;
return this.size.equals(item2.size);
}
}
public class Test
{
public static void main(String[] args)
{
Item itemA= new Item(10);
Item itemB= new Item(10);
Object itemC=itemA;
System.out.println("|"+ itemA.equals(itemB) + "|" + itemC.equals(itemB)+ "|");
}
}
출력 : : 여기
는 코드 | 참 | 거짓 |출력 예상 : | true | true | 여기
는class Item
의
equals
방법
Object
의
equals
메소드를 오버라이드하지 않고, 과부하 때문에
equals
방법의 다른 방법 시그너처 일어나고있다.
질문 : itemC.equals(itemB)
호출에서 Object
클래스의 equals 메서드가 호출되는 이유는 무엇입니까? 나에 따르면
itemC
하는 런타임에서
class Item
의 목적을 가지고있다, 따라서
Item class
의
equals
은 전화를받을 것이다. 런타임에는
Item class
에 두 개의
equals
메소드가 있고, 하나는 자체이며 다른 하나는
Object
클래스에서 상속됩니다. 따라서
equals(Item)
에 대한 호출이기 때문에
equals(Object)
대신
equals(Item)
이 호출되어야합니다.
정확히 내가 누락 된 개념은 무엇입니까?
을 자바를 컴파일하기 때문에,
itemC.equals(itemB)
는Object
클래스의equals
메소드를 호출 다른 말로하면 (멀티) 메소드는 더 이상 논리적으로 단일 클래스에 속하지 않습니다. –