【发布时间】:2020-01-09 10:45:21
【问题描述】:
我在这里检查使用继承和线程的代码。
下面有一个 BaseCom 和 ServerCom 类。 ServerCom 类扩展了 BaseCom 类。 BaseCom 类实现了一个名为 Com 的接口。
public class BaseCom implements Com
{
protected final Thread thread;
protected final InetSocketAddress socketAddress;
public BaseCom(InetSocketAddress socketAddress)
{
System.out.println("BaseCom CONSTRUCTOR!!!!");
this.socketAddress = socketAddress;
thread = new Thread(() -> run(socketAddress));
}
@Override
public void start()
{
System.out.println("HELLO FROM BaseCom start method!!!!");
thread.start();
}
protected void run(InetSocketAddress socketAddress)
{
System.out.println("HELLO FROM BaseCom run!!!!");
}
//.... more stuff .... not shown here
}
lll
public class ServerCom extends BaseCom
{
public ServerCom(InetSocketAddress socketAddress, long timeOutMs)
{
super(socketAddress);
System.out.println("ServerCom CONSTRUCTOR!!!!");
}
@Override
protected void run(InetSocketAddress socketAddress)
{
System.out.println("ServerCom run method!!!!");
}
// ... more stuff.. not shown here
}
为什么当我从 main 函数运行以下代码时,实际上执行的是 ServerCom 类的 run 方法而不是 basecom 类的 run 方法?
thread = new Thread(() -> run(socketAddress)); 行在 BaseCom 类而不是 ServerCom 类中的事实让我认为它应该是被调用的 Basecom 运行方法。
connectorA = new ServerCom(socketAddressA, 1000000);
connectorA.start();
【问题讨论】:
标签: java multithreading inheritance interface base-class