親フィールドを取得する子クラスフィールドを取得しようとしている間。この例では、newDarkRoom
が作成されるときに、intゼロがDarkRoom
コンストラクターに渡されます。フィールドにゼロintを割り当てることになっていthisRoomNumber
ます。次のステップ-初期化した1つのオブジェクトを作成Tenant
して渡しDarkRoom
ます。何らかの理由で、Semaphore
クラスでは、ゼロを割り当てたにもかかわらず、継承し、値をnextRoom
持つhasフィールドがあります。何が欠けている?なぜ私はから得ることができないのですか?デザインは非常に複雑です、多分もう少し簡単な解決策がありますか?thisRoomNumber
Room
96
0
nextRoom.thisRoomNumber
public abstract class Room {
public int thisRoomNumber = 96;
}
主な方法:
public class TestCase {
public static void main(String[] args) {
Room s[] = new Room[1];
{
s[0] = new DarkRoom(0, s);
}
new Tenant("Joe", s[0], s);
}
}
DarkRoomクラス:
public class DarkRoom extends Room {
private Room thisRoomType = this;
public int thisRoomNumber;
private Room[] rooms;
private Semaphore semaphore= new Semaphore();
@Override
void leave(Tenant t) {
semaphore.release(thisRoomType, rooms, t);
}
public int thisRoomNumber;
public DarkRoom(int i, Room[] s) {
this.thisRoomNumber = i;
this.rooms = s;
}
}
セマフォクラス:
public class Semaphore {
public synchronized void release( Room thisRoom, Room[] allRooms, Tenant t) {
Room nextRoom;
while(j < allRooms.length &&
allRooms[j].negativeCounter == 0 &&
thisRoom.getClass().equals(allRooms[j].getClass())){
j++;
}
nextRoom = allRooms[j];
System.out.println(nextRoom.getClass().getName() +"' "+nextRoom.thisRoomNumber);