자바를 배우는 중이며이 연습을하고있어 기본 방법이 무엇을 인쇄하는지 말해야합니다. 그 목표는 Java 상속을 더 잘 이해하는 것입니다.기본 자바 상속 연습
이X x = new C();
B b = new B();
(x.m(b)).m(b); // prints C.m() A.m()
내 주요 방법, 인쇄 "CM() 오전()"의 세 번째 줄은하지만 내가 왜 이해가 안 :
interface X extends Remote{
A m(B bb) throws RemoteException;
}
class A implements Serializable{
int a;
A m(A aa){
aa.a = 3;
System.out.println("A.m");
return aa;
}
}
class B extends A{
int b;
A m(B bb){
bb.b = 7;
System.out.println("B.m");
return bb;
}
}
class C extends A implements X{
public B m(B bb){
if(bb.b == 7) bb.b = 9; else bb.b = 1;
System.out.println("C.m");
return bb;
}
}
지금 내가 전화하는 주요 방법이 Am()을 인쇄합니다. x.m (b)는 정적 유형과 동적 유형이 모두 == B 인 객체를 반환합니다. 이 객체에 대해 호출됩니다. m (b) method; 그래서 그것은 왜 B 클래스의 m() 메소드라고 불리지 않습니까?
B 클래스의 m() 메소드는 A 클래스의 m() 메소드를 다른 우선 순위 매개 변수를 가지고 있기 때문에 무시하는 것이 아닙니다. A
연장 B
의 인스턴스에 미리
나는 A, a, aa, m (A aa), a.m, aa.a와 같은 이름을 사용하는 것을 피하기 시작했다. 단지 코드를 읽기가 더 어렵게 만듭니다. –
당신이 옳고 나는 당신에게 전적으로 동의합니다. 책에서 가져온 운동입니다. 상속을 탐색하는 것뿐입니다. C.m() B.m() 대신 C.m() A.m()을 왜 인쇄했는지에 대한 아이디어가 있습니까? 감사 m8 –