日期:2014-05-20  浏览次数:20964 次

关于强制转换的问题
import java.awt.*;
import java.awt.event.*;

class MyPane1 extends Panel implements ItemListener
{ /**

*/

  Checkbox box1, box2,box3;
  CheckboxGroup sex;
  TextArea text;
  int index=0;
  MyPane1(TextArea text)
  { this.text=text;
 
sex=new CheckboxGroup();
box1=new Checkbox("男",true,sex); 
box2=new Checkbox("女",true,sex);
box1.addItemListener(this);
box2.addItemListener(this);
add(box1);
add(box2);
  }
   
  public void itemStateChanged(ItemEvent e)
   
  { 
 
Checkbox box=(Checkbox)e.getSource();
  if(box.getState())
  { int n=text.getCaretPosition();
  text.insert(box.getLabel(), n);
  }
  }
  }  
class MyPane2 extends Panel implements ItemListener
{ Checkbox box1, box2,box3;
  TextArea text;
  MyPane2(TextArea text)
  { this.text=text;

box1=new Checkbox("abcd"); 
box2=new Checkbox("李四");
box1.addItemListener(this);
box2.addItemListener(this);
add(box1);
add(box2);
  }
  public void itemStateChanged(ItemEvent e) 
  { //System.out.print(box1);
  //System.out.println(e.getItemSelectable());
  Checkbox box=(Checkbox)e.getItemSelectable();
   
  if(box.getState())
  {// int n=text.getCaretPosition();
  //System.out.println(n);
  text.append("\n"+box.getLabel());
  }
  }
  }  
class WindowBox extends Frame
{ MyPane1 panel1;
  MyPane2 panel2;
  TextArea text;
  WindowBox()
  { text=new TextArea();
  //System.out.println(text);
panel1=new MyPane1(text);  
panel2=new MyPane2(text); 
add(panel1,BorderLayout.SOUTH);
add(panel2,BorderLayout.NORTH);
add(text,BorderLayout.CENTER);
setSize(400,200);
  setVisible(true);
  validate();
  addWindowListener(new WindowAdapter(){
  public void windowClosing(WindowEvent e){
  System.exit(0);
  }
  });
  }
}
public class CheckBoxExa
{

/**
* @param args
*/
public static void main(String[] args) {
new WindowBox();
// TODO Auto-generated method stub

}

}



上面的程序实现复选框的项目事件,把发生事件的复选框的名称显示在文本框中。一直不是很明白:Checkbox box=(Checkbox)e.getItemSelectable();这句中e.getItemSelectable()选择框上发生的事件,通过e调用方法获得的也是一个选择框对象,把这个对象赋给另一个选则框对象时为什么还需要(Checkbox)强制转换?

------解决方案--------------------
子类实例赋给父类时不需要显示转型,父类赋给子类时需要显示转型。子类实例只有属性和行为完全和父类一致时才是子类型。