Java의 상속에 문제가 있습니다. 나는 군대의 예를 사용할 것입니다.
public class Soldier {
Squad squad;
public Soldier(Squad _squad) {
squad = _squad;
}
//and some methods, that use squad
}
그리고 나는 가졌다:
public class Archer extends Soldier {
public Archer(ArcherSquad _squad) {
super(_squad);
}
//some new methods, some override
}
과:
public class Warrior extends Soldier {
public Warrior(WarriorSquad _squad) {
super(_squad);
}
//some new methods, some override
}
내 분대는 다음과 같습니다.
Squad;
ArcherSquad extends Squad(some new methods);
WarriorSquad extends Squad(some new methods);
지금은 메소드에 액세스 할 ArcherSquad
에서 Archer
. 아무것도 끊지 않고 코드를 어떻게 변경할 수 있습니까?
분대에 대한 참조를 최대로 이동할 수 있습니다. ArcherSquad
public abstract class Soldier {
// force subclass supply some squad
protected abstract Squad getSquad();
public void someMethod() {
Squad squad = getSquad();
// do something with it.
}
}
public class Archer extends Soldier {
private ArcherSquad archerSquad;
public Archer(ArcherSquad _squad) {
archerSquad = _squad;
}
@Override
protected Squad getSquad() {
return archerSquad;
}
...
}
또는 Soldier
일반 클래스로 전환 할 수 있습니다.
public class Soldier<T extends Squad> {
protected T squad;
public Soldier(T _squad) {
this.squad = _squad;
}
public void someMethod() {
Squad squad = this.squad;
// do something with it.
}
}
public class Archer extends Soldier<ArcherSquad> {
public Archer(ArcherSquad _squad) {
super(_squad);
}
public void someMethodUsingArcherSquad() {
ArcherSquad as = squad;
}
// some new methods, some override
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다