使用ArrayList Java中的方法

使用ArrayList Java中的方法,java,arraylist,Java,Arraylist,我试图使用数组列表中的类中的方法 ArrayList是ArrayList,Appliance是一个超类 ArrayList包含扩展设备的对象,如时钟和灯 当我使用 获取(x)要在该点获取对象,我看不到该对象具有的方法,我只能看到超类对象 有人能帮我吗 谢谢你的阅读 代码(其中一些) 公共抽象类设备实现可序列化{ 保护布尔幂; 保护图像图标图片; 公用电器(第页){ } public void setPower(布尔幂){ 这个。力量=力量; } 公共布尔getPower(){ 返回功率; } 抽

我试图使用数组列表中的类中的方法

ArrayList是ArrayList,Appliance是一个超类

ArrayList包含扩展设备的对象,如时钟和灯

当我使用

获取(x)要在该点获取对象,我看不到该对象具有的方法,我只能看到超类对象

有人能帮我吗

谢谢你的阅读

代码(其中一些)

公共抽象类设备实现可序列化{
保护布尔幂;
保护图像图标图片;
公用电器(第页){
}
public void setPower(布尔幂){
这个。力量=力量;
}
公共布尔getPower(){
返回功率;
}
抽象图像图标getPicture();
@凌驾
公共字符串toString(){
字符串powerVal;
if(this.power==true){
powerVal=“ON”;
}否则{
powerVal=“关”;
}
返回“Power:+powerVal;
}
}
公共类时钟扩展设备{
私人整数小时;
私人整数分钟;
私人整数秒;
公钟{
超级();
这个。幂=假;
this.picture=新的图像图标(“src/res/clock.jpg”);
这个小时=23;
这1.5分钟=59;
这个秒=59;
}
公共时钟(布尔功率、整数小时、整数分钟、整数秒){
超级();
这个功率=功率;
this.picture=新的图像图标(“src/res/clock.jpg”);
这个.小时=小时;
这个。分钟=分钟;
这个。秒=秒;
}
公共整数getHour(){
把这张表还给我;
}
公共无效设置小时数(整数小时){
这个.小时=小时;
}
公共int getMinutes(){
把这个还给我。分钟;
}
公共无效设置分钟数(整数分钟){
这个。分钟=分钟;
}
公共整数getSeconds(){
返回这个。秒;
}
公共无效设置秒(整数秒){
这个。秒=秒;
}
@凌驾
公共图像图标getPicture(){
归还这张照片;
}
@凌驾
公共字符串toString(){
返回super.toString()+String.format(“时间是%d:%d:%d”,this.hours,this.minutes,this.seconds);
}
}
公共级灯具{
//默认构造函数或空参数构造函数
公共灯(){
超级();
这个。幂=假;
this.picture=新的图像图标(“src/res/lamp.jpg”);
}
公共灯(布尔功率){
超级();
这个功率=功率;
this.picture=新的图像图标(“src/res/lamp.jpg”);
}
@凌驾
ImageIcon getPicture(){
返回图片;
}    
@凌驾
公共字符串toString(){
返回super.toString();
}
}
公共类控制器{
私有ArrayList myAppliances=新ArrayList();
私人JLabel[]labelArray;
...................................................
@凌驾
公共无效mouseClicked(MouseEvent me){
字符串[]选项=新字符串[]{“是”、“否”};
如果(me.getButton()==1){
试试{
intx=Integer.parseInt(me.getComponent().getName());
Appliance myApp=this.myAppliances.get(x);
if(myApp.getClass().equals(Clock.class)){
显示选项对话框(null,“时钟信息:/nTime:+myApp.,“时钟”,JOptionPane.YES\u NO\u选项,JOptionPane.QUESTION\u消息,null,选项,选项[1]);
}
}捕获(例外e){
System.out.println(“空指针”);
}
}
}
}
是myApp。单击方法中的一部分

我假设您正在做类似的事情(很抱歉,您的问题不清楚):


您可能还需要使用
instanceOf
操作符来确保您确实拥有所需类的实例。

我假设您正在执行类似操作(很抱歉,您的问题不清楚):


您可能还需要使用
instanceOf
操作符来确保您确实拥有所需类的实例。

听起来像是在编写

List<Appliance> appliances = new ArrayList<>();
appliances.add(new Lamp());
appliances.add(new Clock());

Appliance appliance = appliances.get(0);
appliance.setAlarm(TOMORROW);

但这不是Java的方式。通常情况下,您会在设备上只使用超类方法,或者为时钟和指示灯维护一个单独的列表。

听起来您正在编写

List<Appliance> appliances = new ArrayList<>();
appliances.add(new Lamp());
appliances.add(new Clock());

Appliance appliance = appliances.get(0);
appliance.setAlarm(TOMORROW);
     ArrayList<Appliance> mylist = new ArrayList();
     for(Appliance app : mylist){

     boolean isAclock = app instanceof Clock;
     boolean isALamp = app instanceof Lame;

      if(isAlamp){
      Lamp l = (Lamp)app;
      }else{
      Clock c = (Clock)app;  
      }

     }
但这不是Java的方式。通常,您会在设备上只使用超类方法,或者为时钟和指示灯维护一个单独的列表。

ArrayList mylist=new ArrayList();
     ArrayList<Appliance> mylist = new ArrayList();
     for(Appliance app : mylist){

     boolean isAclock = app instanceof Clock;
     boolean isALamp = app instanceof Lame;

      if(isAlamp){
      Lamp l = (Lamp)app;
      }else{
      Clock c = (Clock)app;  
      }

     }
用于(设备应用程序:mylist){ 布尔值isAclock=时钟的应用实例; 布尔值isALamp=Lame的应用实例; 如果(指示灯){ 灯l=(灯)应用程序; }否则{ 时钟c=(时钟)应用程序; } }
使您的arralist接受appliances将接受其子类,但问题是接收正确的类对象。您可以使用的实例并检查对象类型,然后将对象强制转换为其原始类型 尝试使用这种方法

ArrayList mylist=new ArrayList();
用于(设备应用程序:mylist){
布尔值isAclock=时钟的应用实例;
布尔值isALamp=Lame的应用实例;
如果(指示灯){
灯l=(灯)应用程序;
}否则{
时钟c=(时钟)应用程序;
}
}
使您的arralist接受appliances将接受其子类,但问题是接收正确的类对象。您可以使用的实例并检查对象类型,然后将对象强制转换为其原始类型
尝试使用这种方法,这是预期的行为。这就是多态性的工作原理

让我们看一个使用您自己的类的示例。想象一下拿着一个包。你知道只有
电器
物品可以放进这个袋子,所以你把家里所有的电器都放进这个袋子里-你的
,你的
,也许你的
烤面包机<
Clock clock = (Clock) appliances.get(1);
clock.setAlarm(TOMORROW);
     ArrayList<Appliance> mylist = new ArrayList();
     for(Appliance app : mylist){

     boolean isAclock = app instanceof Clock;
     boolean isALamp = app instanceof Lame;

      if(isAlamp){
      Lamp l = (Lamp)app;
      }else{
      Clock c = (Clock)app;  
      }

     }