안녕하세요.
1번.
오버로딩은 동일한 메소드 이름으로 여러개의 메소드를 정의하는것을 이야기 하는데요,
인자의 타입이나, 갯수, 순서들이 달라야 합니다. 만약 타입과 갯수, 순서가 동일하다면 메소드를 만들수 없지요.
동일하면 같은 메소드 정의로 오류가 발생합니다.
지문코드에서도 static이 붙고 안붙고 차이만 있지 메소드 자체는 서로 동일하기 때문에 오류가 발생합니다.
그리고 변수명은 영향이 없습니다. double a 가 double b 로 변경되었다고 해서 다른 인자가 아닙니다.
하나의 double 타입 으로 보는것이지 변수이름으로 보는것이 아니기 때문에 double a 나 double b나 동일합니다.
2번.
XY a = new XY(); 문장부터 살펴보면,
XY()클래스 객체를 생성하기 위해 XY() 생성자가 호출되겠지요.
XY(){
num++;
}
생성자가 위와 같이 되어있는데, 생성자 첫줄에는 생성자 호출이 오게 되어있는데, 만약 생성자 호출이 없는경우
컴파일러는 자동으로 첫줄에 super();문장을 추가하게 됩니다.
따라서 super(); 문장이 먼저 실행된후 num++;가 수행됩니다.
super();문장은 조상의 매개변수 없는 생성자 호출을 의미하지요.
따라서 X클래스의 X() 생성자가 호출됩니다.
여기에서 num++; 문장을 만나 num이 0에서 1로 증가합니다.
그리고 X()생성자 실행을 완료하고, 호출이전 생성자로 돌아가서,
XY()메소드에 있는 num++;를 실행하여 num=2가 되고, 생성자를 종료하게 됩니다.
최종적으로 num이 2가 되게 됩니다.
참고하세요.