首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAVA在数组中存储3个或3个以上的类

JAVA在数组中存储3个或3个以上的类
EN

Stack Overflow用户
提问于 2014-01-15 00:35:29
回答 2查看 152关注 0票数 0

我有点卡住了,一定会很感激你的帮助的。如标题所示,我希望将不同的类存储在数组上,这是另一个类中的,这将是我的代码

客舱:

代码语言:javascript
复制
public class Customer {
public List<Product> products = new ArrayList<Product>();
public void addProduct(Product p){
    products.add(p);
}

}

产品类:

代码语言:javascript
复制
public abstract class Product{ }

火腿班:

代码语言:javascript
复制
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?谢谢,如果你对我的问题有任何疑问,请问我(英语不是我的第一语言)好日子(:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-15 01:45:36

下面是您正在尝试实现的一个小小的实现

代码语言:javascript
复制
public abstract class Product {
    protected double precio;

    public void setPrecio(double precio){
        this.precio=precio;
    }

    public double getPrecio(){
        return precio;
    }
}

这是另一个

代码语言:javascript
复制
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");
    }
}

这也是这个

代码语言:javascript
复制
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");
    }
}

最后

代码语言:javascript
复制
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在您的小示例中,您似乎混合了doubleint的概念,它们都表示数字,但只有第一个有小数点。如果您使用的是十进制值(与精确值一样),请将字段声明为 double ,并始终使用double。

新客户类(只存储ArrayList中的产品价格)

代码语言:javascript
复制
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);
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2014-01-15 00:44:47

正如其他人已经评论过的那样,您可以将Product的任何子类的实例添加到ArrayList<Product>中。你已经做过了。

如果您希望所有产品都有一个precio,那么您可以在抽象类Product上而不是在Jamon和其他子类中定义它。将变量precio的声明从Jamon移动到Product。还可以将getPreciosetPrecio方法移动到Product。在Product中创建一个构造函数以接受precio。在子类(如Jamon )的构造函数中,调用super(precio)来初始化precio

然后,您将能够循环遍历ArrayList中的所有precio,并调用getPrecio()方法来添加所有precio

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21126983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档