【发布时间】:2014-06-02 20:02:07
【问题描述】:
我一直在研究创建一个条形码扫描程序,在我的研究中我遇到了一些我以前从未见过的东西,我不确定它到底在做什么......
这是我的程序的一个 sn-p,包括我不明白的行:
import javax.comm.*;
public class InvScan implements SerialPortEventListener {
static CommPortIdentifier portId1;
SerialPort serialPort1;
public InvScan(){
serialPort1 = (SerialPort) portId1.open("InvScan", 2000); //what does this mean?
}
请参阅我评论“这是什么意思?”的那一行。 SerialPort 是一个抽象类...我知道可以使用匿名类来实例化抽象类,但我以前从未见过这种情况。这行代码来自一个程序教程,该程序旨在做与我想做的事情相关的事情,但作者没有很好地解释这里发生了什么(或者也许我只是不明白?)。他的笔记说:
我们通过执行 portId1 的 open() 方法来实例化 SerialPort 对象。回想一下,portId1 是一个 ComPortIdentifier 对象,而 open() 方法来自 ComPortIdentifier。
我进行了一些研究,但我什至找不到另一个例子来说明这里发生的事情(可能是因为我什至不知道该怎么称呼它,真的)。
这对我的程序来说甚至都不是必需的,因为我可以重新设计它(而不是成为脚本小子,哈哈),但我不知道那一行发生了什么,这真的让我很烦恼。
【问题讨论】:
-
变量容器类型可以是抽象的,实例化的类型(从 open 方法调用中检索)仍然是从抽象基类型派生的具体类型。
-
你不明白什么?它只是一个返回 SerialPort 类型对象的方法。它的实际具体类型是 Serial Port 的子类,可以是也可以不是匿名类。
标签: java abstract-class instantiation