public class Superhero {
String s;
public Superhero() {
s = "I'M A SUPERHERO";
System.out.println(s);
}
public void punch() {
System.out.println("Punch! Punch!");
}
public void punch(Superhero a) {
System.out.println("BOOM" + s);
}
}
public class Batman extends Superhero {
String s;
public Batman() {
s = "NANANANANA";
}
public Batman(String s) {
this.s = s;
System.out.println(this.s);
}
public void punch(Superhero v) {
s = "BATMAN!";
super.punch(v);
System.out.println("BOOM " + s);
}
public void punch(Batman b) {
System.out.println("Wat.");
}
public static void main(String[] args) {
Superhero superhero = new Batman();
superhero.punch((Batman) superhero);
}
}
왜 이것이 유효한 코드입니까? 그것은 Superhero
인 정적 유형에 대해 punch(Batman b)
함수를 찾지 않으며 서명을 정확하게 일치시키는 함수가 없으므로 컴파일 타임 오류가 아닐까요? 그것이 무엇을하는지에 따라, 그것은 슈퍼 히어로 클래스에서 punch(Superhero a)
을 실행합니다.다른 매개 변수로 어떤 메소드를 실행합니까?
"I'M A SUPERHERO"
"BOOM I'M A SUPERHERO"
"BOOM BATMAN!
주의! '슈퍼 히어로 '에서'배트맨'의 변수's'는's'을 가리 킵니다. –