java抽象方法子类怎么调用_java – 未调用子类抽象方法

我会发布一些代码然后问我的问题,因为我认为它需要一些解释.

所以这是我的超类的基本表示:

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

}

}

我有一个开关,旨在能够决定调用哪个版本的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.目前,它什么都没打印!我猜是因为它在父类中调用抽象方法,它没有主体.

谁能为我解释这个问题?

另外,作为一个附带问题,这是属于多态还是继承?

谢谢!

解决方法:

我已经成功了.我不知道你做错了什么,但也许你会从这个源代码中弄明白.

package transport;

/**

* ModeOfTransport description here

* @author Michael

* @link https://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 https://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 https://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);

}

}

标签:superclass,java,polymorphism,subclass

来源: https://codeday.me/bug/20190725/1536175.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值