我有点卡住了,一定会很感激你的帮助的。如标题所示,我希望将不同的类存储在数组上,这是另一个类中的,这将是我的代码
客舱:
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?谢谢,如果你对我的问题有任何疑问,请问我(英语不是我的第一语言)好日子(:
发布于 2014-01-15 01:45:36
下面是您正在尝试实现的一个小小的实现
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,这意味着:
-Any变量(如精确性)或方法(setPrecio或getPrecio)对它们可用。因为它在抽象类中定义。其中一个例外是带有私有的类,它们在扩展类中是不可访问的。
-Since客户添加了一堆元素作为产品,除非列表中的项被抛出,否则无法访问在Jamon或Pepino中定义的方法。
将内部字段声明为公共变量(我指的是客户中的产品,生成一个getter/setter),-It并不是很普遍的做法。
-Also在您的小示例中,您似乎混合了double和int的概念,它们都表示数字,但只有第一个有小数点。如果您使用的是十进制值(与精确值一样),请将字段声明为 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);
}
}
}发布于 2014-01-15 00:44:47
正如其他人已经评论过的那样,您可以将Product的任何子类的实例添加到ArrayList<Product>中。你已经做过了。
如果您希望所有产品都有一个precio,那么您可以在抽象类Product上而不是在Jamon和其他子类中定义它。将变量precio的声明从Jamon移动到Product。还可以将getPrecio和setPrecio方法移动到Product。在Product中创建一个构造函数以接受precio。在子类(如Jamon )的构造函数中,调用super(precio)来初始化precio。
然后,您将能够循环遍历ArrayList中的所有precio,并调用getPrecio()方法来添加所有precio。
https://stackoverflow.com/questions/21126983
复制相似问题