我在最后附加了代码。

所以我有一个叫做Product,ComputerPart和Ram的类。 Ram扩展Computer部件,ComputerPart扩展产品,由于Product是一个抽象类,因此所有类都从该产品覆盖价格属性。

我对ArrayList和List的实现正确吗?
如何通过arraylist在ComputerParts类中达到getter方法。
当我通过ComputerPart通过76f时,我有些困惑,因为它没有被正确地实例化,所以如何使用?

abstract class Product {
    protected float price;
    public static int i =0;                   // to keep count starts at zero
    protected static int ID ;               // to update and keep track of ID even if i changes

     // return the price of a particular product
    abstract float price();
}


class ComputerPart extends Product {

     public ComputerPart(float p) {
        i += 1;                             // each time constructor invoked ,
        ID = i ;                                // to update ID even if i changes.
        price = p;
    }

    public float price() { return price; }

    public static String getID(){   // a getter method so ID can be nicely formated and returned
        String Identification =  "ID#" + ID;
        return Identification;
    }
}

public abstract class GenericOrder {

    public static void main(String[] args) {

        ArrayList<Product> genericOrder= new ArrayList<Product>();
        genericOrder.add(new ComputerPart(76f));
    }
}

最佳答案

ArrayList<Product> genericOrder= new ArrayList<Product>();


这很好,尽管将变量类型声明为List接口是一种更好的做法(这使您的代码更具模块化,因为您可以轻松地切换到其他List实现):

List<Product> genericOrder= new ArrayList<Product>();


至于访问存储在列表中的对象的特定属性:

您可以从列表中获取产品:

Product p = genericOrder.get(0);


然后,您可以检查它是否为ComputerPart并进行强制转换,以访问ComputerPart的特定方法:

if (p instanceof ComputerPart) {
    ComputerPart c = (ComputerPart) p;
    System.out.prinln(c.price());
}

07-24 14:25