我有点陷入困境,非常感谢你的帮助。正如标题所说,我想在一个数组上存储不同的类,这是在另一个类中 这将是我的代码
客户类:
public class Customer {
public List<Product> products = new ArrayList<Product>();
public void addProduct(Product p){
products.add(p);
}
}
产品类:
public abstract class Product{ }
火腿班:
public class Jamon extends Product{
protected String marca;
protected int precio;
public Jamon(String marca,Double precio){
this.marca=marca;
this.precio=precio;
}
public void setMarca(String marca){
this.marca=marca;
}
public String getMarca(){
return marca;
}
public void setPrecio(int precio){
this.precio=precio;
}
public int getPrecio(){
return precio;
}
*/
public void comprar(){
System.out.println("Se ha comprado el jamon");
}
我想知道的是如何将Jamon类存储在Customer类的数组中,我想要这样,因为会有多个类如Jamon从Product扩展。此外,如果所有这些类(Pepino,Jelly等)都有precios,我怎样才能添加所有的precios? 谢谢,如果您对我的问题有任何疑问,请问我(英语不是我的第一语言)美好的一天(:
答案 0 :(得分:0)
正如其他人已经评论过的那样,您可以将Product
的任何子类的实例添加到ArrayList<Product>
。你已经完成了。
如果您希望所有产品都有precio
,那么您可以在抽象类Product
而不是Jamon
和其他子类中定义它。将变量precio
的声明从Jamon
移至Product
。同时将方法getPrecio
和setPrecio
移至Product
。在Product
中创建一个构造函数以接受precio
。在诸如Jamon
的子类的构造函数中,调用super(precio)
来初始化precio
。
然后,您将能够遍历Product
中的所有ArrayList
并调用getPrecio()
方法将所有precio
加起来。
答案 1 :(得分:0)
这是你似乎想要实现的一个小实现
public abstract class Product {
protected double precio;
public void setPrecio(double precio){
this.precio=precio;
}
public double getPrecio(){
return precio;
}
}
这是另一个
public class Jamon extends Product{
protected String marca;
public Jamon(String marca,Double precio){
this.marca=marca;
this.precio=precio;
}
public void setMarca(String marca){
this.marca=marca;
}
public String getMarca(){
return marca;
}
public void comprar(){
System.out.println("Se ha comprado el jamon");
}
}
这也是这个
public class Pepino extends Product{
protected String marca;
public Pepino(String marca,Double precio){
this.marca=marca;
this.precio=precio;
}
public void setMarca(String marca){
this.marca=marca;
}
public String getMarca(){
return marca;
}
public void comprar(){
System.out.println("Se ha comprado el pepino");
}
}
最后
import java.util.List;
import java.util.ArrayList;
public class Customer {
public List<Product> products = new ArrayList<Product>();
public void addProduct(Product p){
products.add(p);
}
public static void main(String[] args) {
Customer customer = new Customer();
Jamon jamon = new Jamon("Jabugo", 25.0);
Pepino pepino = new Pepino("Extra picante", 8.50);
Jamon negro = new Jamon("Pata Negra", 32.99);
customer.addProduct(jamon);
customer.addProduct(pepino);
customer.addProduct(negro);
for (Product product : customer.products) {
System.out.println(product.getClass());
}
}
}
好的,所以要清楚。 Jamon和Pepino都来自Product,这意味着:
- 他们可以使用任何变量(例如precio)或方法(setPrecio或getPrecio)。由于它在抽象类中定义。一个例外是私有,在扩展类中不可访问。
- 由于客户添加了一堆元素作为产品,除非列表中的项目是铸造的,否则无法访问Jamon或Pepino中定义的方法。
- 将内部字段声明为公共变量(我指的是Customer中的产品,制作一个getter / setter)并不是很常见的做法。
- 在您的小例子中,您似乎混合了 double 和 int 的想法,两者都代表数字,但只有第一个有小数点。如果您使用十进制值,就像在precio中一样,请将字段声明为 double ,并始终使用double。
新客户类(仅在ArrayList中存储价格,与产品相对应)
import java.util.List;
import java.util.ArrayList;
public class Customer {
public List<Double> products = new ArrayList<Double>();
public void addProduct(Product p){
products.add(p.getPrecio());
}
public static void main(String[] args) {
Customer customer = new Customer();
Jamon jamon = new Jamon("Jabugo", 25.0);
Pepino pepino = new Pepino("Extra picante", 8.50);
Jamon negro = new Jamon("Pata Negra", 32.99);
customer.addProduct(jamon);
customer.addProduct(pepino);
customer.addProduct(negro);
for (Double productPrice : customer.products) {
System.out.println(productPrice);
}
}
}