如题,本人是新手,希望各位多多关照,谢谢!
最近在做一个串口小程序,代码如下:public class CommTest {
        //主方法如下
    public static void main(String[] args) {
        CommPortIdentifier portId;                                   
        SerialPort serial=null;                                //定义串口;        portId=CommPortIdentifier.getPortIdentifier("COM1");   //返回CommPortIdentifier实例
        serial=(SerialPort)portId.open("MyApp", 60); //这一步可以这样做让比较疑惑,javadoc里面CommPortIdentifier.open()方法返回的是CommPort类对象,而CommPort类又是SeriaPort类的父类,这里相当于做了一个强制的向下转化,但是java多态性里面说向下转化时一定要先做个向上转化,这里没这样做,然后也能用,麻烦高手帮忙看下,谢谢!                  serial.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
                
    }
}顺便把javadoc的部分内容粘上:
1、CommPortIdentifier里面部分方法
open() 
 public synchronized CommPort open(String appname,
                                   int timeout) throws PortInUseException
这里返回的是CommPort对象2、java.lang.Object
   |
   +----javax.comm.CommPort
           |
           +----javax.comm.SerialPortpublic abstract class SerialPort 
extends CommPort SerialPort 是 CommPort 的子类

解决方案 »

  1.   


    SerialPort serial=null; 
    portId=CommPortIdentifier.getPortIdentifier("COM1"); serial=(SerialPort)portId.open("MyApp", 60);
    //1.serial是SerialPort类型,而open()会返回SerialPort的父类类型,就好比:我现在需要一致狗,你给我一个动物,这肯定不符合要求的(因为我要的是狗,万一你给的是猫呢),除非你声明说这个动物就是狗,这样才能符合要求。
    //2.java多态性里面说向下转化时一定要先做个向上转化没见过
      

  2.   


    对象向下转换时需要强制转换时需要先做个向上转换是从一本java的基础教程中看到的,书上例子是这样的:
    class A
    {
    }
    class B extends A
    {
    }
    public class Demo03
    {
    public static void main(String args[]){
    A a=new A();
    B b=(B)a;
    }
    }
    编译没有问题,但是执行的时候会出现
    ClassCastException:A cannot be cast to B的错误如果换成
    A a=new B();
    B b=(B)a;
    这样就不会有错了
      

  3.   

    这叫对象向下转换时需要强制转换时需要先做个向上转换么?基类是车,子类是轿车、卡车……,轿车、卡车也是车(A a = new B())。
      

  4.   

    A要是动物,B要是猫。动物不知道他的子类有猫。
    A的引用要是指向子类对象,也就是类型强转时,B b=(B)a;要注意,必须判断一下,否则容易产生ClassCastException。