3

説明が必要だと思うので、いくつかのコードを投稿してから質問します。したがって、これが私のスーパークラスの基本的な表現です。

public abstract class ModeOfTransport {
    public abstract void updateView(String name);
}

以下は、私のサブクラスの例です。

public class Bus extends ModeOfTransport {
    @Override
    public void updateView(String stopName) {
        System.out.println("BUS");
    }
}

public class Train extends ModeOfTransport {
    @Override
    public void updateView(String stopName) {
        System.out.println("TRAIN");
    }
}

switchのどのバージョンが呼び出されるかを決定できるようにするための がありますupdateView()

switch(transportType) {
    case BUS:
        handleInfo(new Bus());
        break;
    case TRAIN:
        handleInfo(new Train());
        break;
    default:
        break;
}

private void handleInfo(ModeOfTransport transportType) {
    transportType.updateView(name);
}

私の目標は、またはのいずれかを印刷することTRAINですBUS。現時点では、何も印刷されません。本体を持たない親クラスの抽象メソッドを呼び出しているためだと思います。

誰かが私のためにこれに光を当てることができますか?

また、余談ですが、これは に該当しますpolymorphisminheritance?

ありがとう!

4

2 に答える 2

6

私はそれを機能させました。何が間違っているのかわかりませんが、おそらくこのソース コードから理解できるでしょう。

package transport;

/**
 * ModeOfTransport description here
 * @author Michael
 * @link http://stackoverflow.com/questions/14097153/java-subclass-abstract-method-not-being-called/14097167#14097153
 * @since 12/30/12 10:46 PM
 */
public abstract class ModeOfTransport {
    public abstract void updateView(String name);
}

package transport;

/**
 * Bus description here
 * @author Michael
 * @link http://stackoverflow.com/questions/14097153/java-subclass-abstract-method-not-being-called/14097167#14097153
 * @since 12/30/12 10:47 PM
 */
public class Bus extends ModeOfTransport {
    @Override
    public void updateView(String name) {
        System.out.println("BUS");
    }
}

package transport;

/**
 * Train description here
 * @author Michael
 * @link
 * @since 12/30/12 10:48 PM
 */
public class Train extends ModeOfTransport {
    @Override
    public void updateView(String name) {
        System.out.println("TRAIN");
    }
}


package transport;

/**
 * TransportVisitor description here
 * @author Michael
 * @link http://stackoverflow.com/questions/14097153/java-subclass-abstract-method-not-being-called/14097167#14097153
 * @since 12/30/12 10:49 PM
 */
public class TransportVisitor {
    public static void main(String[] args) {
        TransportVisitor visitor = new TransportVisitor();
        String [] types = { "TRAIN", "BUS" };
        for (String type : types) {
            visitor.updateView(type);
        }
    }

    public void updateView(String transportTypeName) {
        switch(transportTypeName) {
            case "BUS":
                handleInfo(new Bus());
                break;
            case "TRAIN":
                handleInfo(new Train());
                break;
            default:
                break;
        }
    }

    private void handleInfo(ModeOfTransport transportType) {
        transportType.updateView((String) null);
    }
}
于 2012-12-31T03:38:53.557 に答える
2

メソッドの名前に一貫性がありません。基本クラスにはupdateViewがありますが、派生クラスにはありますupdateWebViewまた、基本クラスのメソッドをまだ使用していないため、これはポリモーフィズムに分類されます。つまり、必要に応じてインターフェイスを使用できます。

于 2012-12-31T03:40:00.910 に答える