0

私の AP コンピューター サイエンスのクラスでは、 GridWorldのケース スタディを行ってきました。それを見ていると、AbstractGrid クラスには抽象メソッドや値がないため、抽象化する理由がないように見えます。これはなぜでしょうか?

詳しくは

Grid インターフェースの実装を強制するだけの場合、これらのメソッドを抽象メソッドとして持たないのはなぜですか (したがって、とにかくインターフェースなしでこれらのクラスの署名を強制します)。また、いずれにせよ、両方の子がそのメソッドのほとんどをオーバーライドします。

package info.gridworld.grid;
import java.util.ArrayList;

public abstract class AbstractGrid<E> implements Grid<E>
{
    public ArrayList<E> getNeighbors(Location loc)
    {
        ArrayList<E> neighbors = new ArrayList<E>();
        for (Location neighborLoc : getOccupiedAdjacentLocations(loc))
            neighbors.add(get(neighborLoc));
        return neighbors;
    }

    public ArrayList<Location> getValidAdjacentLocations(Location loc)
    {
        ArrayList<Location> locs = new ArrayList<Location>();

        int d = Location.NORTH;
        for (int i = 0; i < Location.FULL_CIRCLE / Location.HALF_RIGHT; i++)
        {
            Location neighborLoc = loc.getAdjacentLocation(d);
            if (isValid(neighborLoc))
                locs.add(neighborLoc);
            d = d + Location.HALF_RIGHT;
        }
        return locs;
    }

    public ArrayList<Location> getEmptyAdjacentLocations(Location loc)
    {
        ArrayList<Location> locs = new ArrayList<Location>();
        for (Location neighborLoc : getValidAdjacentLocations(loc))
        {
            if (get(neighborLoc) == null)
                locs.add(neighborLoc);
        }
        return locs;
    }

    public ArrayList<Location> getOccupiedAdjacentLocations(Location loc)
    {
        ArrayList<Location> locs = new ArrayList<Location>();
        for (Location neighborLoc : getValidAdjacentLocations(loc))
        {
            if (get(neighborLoc) != null)
                locs.add(neighborLoc);
        }
        return locs;
    }

    /**
     * Creates a string that describes this grid.
     * @return a string with descriptions of all objects in this grid (not
     * necessarily in any particular order), in the format {loc=obj, loc=obj,
     * ...}
     */
     public String toString()
     {
         String s = "{";
         for (Location loc : getOccupiedLocations())
         {
             if (s.length() > 1)
                 s += ", ";
             s += loc + "=" + get(loc);
         }
         return s + "}";
     }
}
4

2 に答える 2

8

AbstractGrid<E>は を実装Grid<E>していますが、すべてのメソッドを実装しているわけではないため、 を宣言する必要がありますabstract

の非abstractサブクラスは、AbstractGrid<E>これらのメソッドを実装する必要があります。

于 2013-03-21T21:24:24.430 に答える
0

このクラスは、複数のタイプの「Grid」クラスが継承されているため、abstract です。AbstractGrid には共通のメソッド/変数が含まれていますが、単独では機能しません。したがって、それは抽象的です。

去年この試験を受けなければなりませんでした、頑張ってください =)

于 2013-03-21T21:26:53.283 に答える