https://www.javatpoint.com/static-binding-and-dynamic-binding
int data = 30; 에서 data는 int라는 타입을 가진다
class Dog{ d1은 Dog라는 타입을 가진다.
main(){ Dog d1; }
}
class Animal{}
class Dog extends Anmial{main(){ Dog d1 = new Dog();}}
여기서 d1은 Dog의 참조변수이기도하고 Animal의 참조변수이기도 하다.
d1은 Dog 타입이기도 하고 Animal타입이기도 하다
Animal a = new Dog(); a.eat()
했을때 Dog의 eat인지 Animal의 eat()인지 컴파일러에의해 결정되지 못한다.
왜냐하면 Dog 참조변수가 Animal의 참조변수이기도 하기 떄문이다. 따라서
컴파일러는 타입을 모른다 . base type만 안다.
객체의 타입이 결정되는 시점이 컴파일 시점에 결정 되는 것
private, fianl or static이 메서드에 있으면 정적 바인딩이다.
Overloading은 메소드 파라미터 개수 타입등이 다르다 .
이를 통해 컴파일러가 다른 메소드를 호출하는 것으로 결정할 수 있고 따라서 정적 바인딩이다.
타입이 결정되는 시점이 실행 시점인 것
Overriding은 같은 이름을 갖는 부모 클래스의 메서드의 구현을
자식 클래스에서 다르게 구현하는 것이다.
같은 이름을 갖고있어 컴파일러가 어느 클래스의 메서드인지 구분하지 못한다.
실행 시점에 어떤 클래스의 메서드가 실행되는지 결정된다.. 따라서 동적바인딩
실행시점에 결정되어 정적바인딩보다 속도가 느릴수있지만 다형성, 상속등 기능을 사용할 수 있는 장점이 존재한다.