Java 使用2个包将2个类中的数据放入一个数组
嗯 既然我的困惑已经消除,我想我可能把问题的措辞弄错了 我将“GenericMessage”、“email”和“fax”类放在一个包中 “email”和“fax”中有一个变量是字符串 上述所有类都位于名为“Message”的包中 现在我已经创建了一个名为“发件箱”的新包 它包含一个字符串数组,并且正在尝试将“传真”和“电子邮件”中的字符串放入一个数组中Java 使用2个包将2个类中的数据放入一个数组,java,arrays,Java,Arrays,嗯 既然我的困惑已经消除,我想我可能把问题的措辞弄错了 我将“GenericMessage”、“email”和“fax”类放在一个包中 “email”和“fax”中有一个变量是字符串 上述所有类都位于名为“Message”的包中 现在我已经创建了一个名为“发件箱”的新包 它包含一个字符串数组,并且正在尝试将“传真”和“电子邮件”中的字符串放入一个数组中 package Outbox; public class Outbox extends GenericMessage { GenericM
package Outbox;
public class Outbox extends GenericMessage
{
GenericMessage messageList[];
public Outbox (GenericMessage [] messageList )
{
messageList = new GenericMessage[50];
}
}
我的问题是,我无法从另一个包调用通用消息。
如何做到这一点?为
电子邮件
和传真
public class Message {
//common fields and methods
}
public class Email extends Message {
// email-specific fields and methods
}
public class Fax extends Message {
// fax-specific fields and methods
}
然后只需使用消息
数组:
Message[] messageList;
就像Joachim Sauer,但有点不同: 引入一个接口。这很好,因为每个子类都必须实现这个接口的方法
public interface Message {
//methods that must be implemented
}
public class Email implements Message {
// email-specific fields and methods
}
public class Fax implements Message {
// fax-specific fields and methods
}
Message[] messageList;
感谢Joachim提供的代码;) 数组中的所有元素必须具有相同的类型。因此,第一步是确保:创建公共基类(或接口)并创建该类型的数组。然后可以将任意一种类型放入数组中
或者您可以创建一个类型为
Object
的数组(因为Java中的所有对象都有这个公共基类)。这里的缺点是,您无法再看到阵列中的内容。它可能是任何东西。当你开始使用数组时,这会对你产生影响:你需要大量使用instanceof
来确定你得到了什么以及你能用它做什么。只是出于好奇:这会编译吗。。。类中的两个变量具有相同的名称,函数的两个参数具有相同的名称
package Outbox;
public class Outbox
{
Email messageList[];
Fax messageList[];
public Outbox (Email [] messageList,Fax [] messageList)
{
//whatever
}
}
没关系。我找到了导入命令否。只是一些修改。但从未教过如何将来自不同类的两个变量放入一个数组。“我一直在尝试创建一个数组,从两种类型的类中获取数据。”您想要一个包含多种类型的类的单数组,还是想要一个包含来自多个类的数据的单数组?你说的是后面的,但我们认为你的意思是,我也想要从两个类中获取数据,并将其传递到另一个类中的一个数组中。我的传真包含一个字符串,我的电子邮件包含一个字符串。我也希望将两个字符串存储在一个名为outbox的类中的一个数组中。那么,只需要一个字符串数组。有趣的是,下面所有的答案都是针对一个不同的问题。您可能想更新您的问题并告知此更改的答案。但是它不需要也从子类中获取变量吗?不仅仅是方法?这不要求他能够更改电子邮件和传真吗?@OVERTONE接口没有字段。我的意思是,你假设他有传真和电子邮件的来源,并且他可以更改它们。Java接口中的Aaron Digulla可以有字段。然而,在这种情况下,它们是隐式的最终、公开和静态的。这难道不要求他能够更改电子邮件和传真吗?“地址”似乎比“消息”更合适。是的。你没有在问题中说你不能修改有问题的类。你必须有一个对象[]。@Aaron:因为他调用了他的数组消息列表,我认为他在谈论消息,而不仅仅是地址。我也扩展了发件箱消息。我没有得到任何错误,但它仍然没有做我想要的。消息列表尚未定义。不,它不会编译。重复的字段名和构造函数参数名都无效。+1无法编译,Java标识符应具有唯一的全名。
package Outbox;
// >> this was the missing piece
import Message.*;
public class Outbox
{
GenericMessage messageList[];
public Outbox (GenericMessage [] messageList )
{
messageList = new GenericMessage[50];
}
}