Registrierung
leer
leer
newposts
Users
search
FAQ
Login
Start

Hallo Gast, und Willkommen im Forum. Sie müssen sich einloggen oder registrieren, um alle Funktionen nutzen zu können.


PN's Forum \ Computer \ Programmierung \ Programmiersprachen \ Java - NullPointerException beim Aufruf einer geerbten Methode


 Poison Nuke  *

#1 Verfasst am 15.06.2014, um 22:46:51



Hio,


ich komm hier nicht weiter. Die abstrakte Klasse "ComplexPricing" enthält die Methode "add", die einfach nur Objekte zu einer linkedList hinzufügt.

Die zweite Klasse erbt von der oberen und im Konstruktor dieser realen Klasse soll die gerbte Methode gleich genutzt werden, um in die geerbte Struktur ein Element einzufügen.

Allerdings resultiert der Aufruf des Konstruktors in einer NullPointerException


Quellcode
public abstract class ComplexPricing {
	public void add (int pricing) {
		alltogether.add(pricing);
	}

	protected LinkedList<int> alltogether;
}


public class BestForStorePricing extends ComplexPricing {
	public BestForStorePricing(int pricing) {
		add(pricing); 
	}
}



was übersehe ich hier?



greetz
Poison Nuke

bearbeitet von Poison Nuke, am 15.06.2014, um: 22:47:22


tapsel

#2 Verfasst am 15.06.2014, um 23:34:22



Hallöle,

zwei Dinge stimmen nicht ganz. In Java können Listen keine primitiven Datentype enthalten, du musst die Liste mit Objekten der Integer Klasse füllen. Die NullPointerException kommt weil alltogether nicht instanziert ist. So sollte es klappen


Quellcode
public abstract class ComplexPricing {

	protected LinkedList<Integer> alltogether = new LinkedList<Integer>();

	public void add (int pricing) {
		alltogether.add(Integer.valueOf(pricing));
	}	
}


public class BestForStorePricing extends ComplexPricing {
	public BestForStorePricing(int pricing) {
		add(pricing); 
	}
}


Integer.valueOf() könntest du beim add auch weglassen (der Compiler versteht was gemeint ist), wäre aber nicht ganz so anständig bzw. sauber programmiert.


bearbeitet von tapsel, am 15.06.2014, um: 23:43:21


 Poison Nuke  *

#3 Verfasst am 16.06.2014, um 07:49:30



hi,

stimmt, die Instanz hab ich ganz vergessen.
Aber müsste ich dafür nicht einen Konstruktor für die Superklasse erstellen, da man Objekte nicht "einfach so" instanzieren kann ?


greetz
Poison Nuke

tapsel

#4 Verfasst am 16.06.2014, um 15:25:49



Variablen Zuweisung gleich bei der Definition ...also scheinbar "einfach so" geht in Java. Das liegt daran das diese noch vor dem Aufruf des eigentlichen Konstruktors einer Klasse ausgeführt werden. Wenn dich Details interessieren schau dir dazu am besten das Grundkonzept bzw. die Speicherverwaltung von Java an. Im Java Alltag laufen also folgende beiden Beispiele (für die Objekte f und f2) auf das Gleiche raus.


Quellcode
class Foo {
	private int a;
	private String s;
	private LinkedList<Integer> alltogether;

	public Foo() {
	    a = 5;
	    s = "hallo";
	    alltogether = new LinkedList<Integer>();
	}
}

class Foo2 {
	private int a = 5;
	private String s = "hallo";
	private LinkedList<Integer> alltogether = new LinkedList<Integer>();

	public Foo2() {
	}
}

public static void main(String[] args) {
	Foo f = new Foo();
	Foo2 f2 = new Foo2();
}



bearbeitet von tapsel, am 16.06.2014, um: 16:08:45


 Poison Nuke  *

#5 Verfasst am 16.06.2014, um 16:23:23



gut zu wissen, danke
Ich kannte es bisher nur aus der C++ (98) Welt, dass man dort zwangsweise den Konstruktor verwenden musste. Denke ich zumindest, hab mir das immer so eingeprägt, dass ohne Konstruktor nix geht, außer bei static (final).


greetz
Poison Nuke

PN's Forum \ Computer \ Programmierung \ Programmiersprachen \ Java - NullPointerException beim Aufruf einer geerbten Methode


- Zurück zur Homepage - Eigene Beiträge - Neue Beiträge - Wer ist online? - Impressum - Datenschutz - Statistiken -



Board coded and provided by: Poison Nuke
Copyright 2007-2014, Robert Menger