gpt4 book ai didi

java - 未调用子类抽象方法

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:13:04 27 4
gpt4 key购买 nike

我将发布一些代码然后提出我的问题,因为我认为它需要一些解释。所以这是我的父类(super class)的基本表示:

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);
}

我的目标是打印出 TRAINBUS。目前,它什么都不打印!我猜是因为它正在调用没有主体的父类中的抽象方法。

任何人都可以为我阐明这一点吗?

此外,作为附带问题,这属于多态性还是继承

谢谢!

最佳答案

我成功了。我不知道你做错了什么,但也许你会从这个源代码中弄清楚。

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);
}
}

关于java - 未调用子类抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14097153/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com