2014-11-20 2 views
-1

Теперь я знаю, что нельзя инициировать абстрактный класс. Но я читал в java.lang.NullPointerException, о котором говорят люди, вызванные полями, все еще указывающими на null. Я инициализировал унаследованные методы суперкласса через ComputerPart, но я все еще получаю сообщение об ошибке. Я принимаю онлайн-классы, поэтому ваш вклад очень ценится. Спасибо.java lang NullPointerException с использованием абстрактного класса?

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; } 

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

//------------------------------------------------------------ 
import java.util.*; 

public class GenericOrder <T extends Product> { 
    ArrayList<Product> genericOrder; 

    public String comPrice(float comPrice){ 
     genericOrder.add(new ComputerPart(comPrice)); 
     String s; 
     s="Computer Part, Price=$ "+comPrice; 
     return s; 
    } 
} 

И мой тестовый класс

GenericOrder gen = new GenericOrder<Product>(); 
gen.comPrice(0); 
+0

Укажите код, в котором поднимает 'NullPointerException'. –

+3

Вы никогда не инициализируете 'genericOrder' –

+0

genericOrder.add (новая ComputerPart (comPrice)); это строка из класса GenericOrder –

ответ

3

genericOrder никогда не инициализируется. Изменение

ArrayList<Product> genericOrder; 

в

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

Или лучше: 'Список genericOrder = new ArrayList ();' или 'List genericOrder = new ArrayList <>();' (если Java 7 или sup). –

Смежные вопросы