0

親フィールドを取得する子クラスフィールドを取得しようとしている間。この例では、newDarkRoomが作成されるときに、intゼロがDarkRoomコンストラクターに渡されます。フィールドにゼロintを割り当てることになっていthisRoomNumberます。次のステップ-初期化した1つのオブジェクトを作成Tenantして渡しDarkRoomます。何らかの理由で、Semaphoreクラスでは、ゼロを割り当てたにもかかわらず、継承し、値をnextRoom持つhasフィールドがあります。何が欠けている?なぜ私はから得ることができないのですか?デザインは非常に複雑です、多分もう少し簡単な解決策がありますか?thisRoomNumberRoom960nextRoom.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);
4

2 に答える 2

2

thisRoomNumberサブクラスでもフィールドを宣言することにより、フィールドを非表示にしています。サブクラス(DarkRoom)での宣言を削除します。

于 2012-04-30T22:05:36.760 に答える
2

Javaではフィールドは多形ではありません。メソッドのみです。すべてのまともな本が示唆することを行い、公共の場を決して使用しないでください。代わりにゲッターを使用し、サブクラスのゲッターをオーバーライドします。フィールドを上書きすることはできません。

于 2012-04-30T22:06:13.277 に答える