# Vererbung: privat Variablen



## Bob2 (10. Feb 2005)

Hallo!

Ich habe eine Klasse DoublyLinkedList aus einer klasse MyList vererbt. Diese urprüngliche MyList klasse hat privat Variablen. Wie kann ich diese variablen in der vererbten Klasse weiterverwenden?

Danke.

Christophe


----------



## Manfred (10. Feb 2005)

Indem du get/set-Methoden in der Superklasse schreibst (public), diese werden weitervererbt und können dann in der Subklasse benutzt werden. So kommst du an diese Werte


----------



## Beni (10. Feb 2005)

Gar nicht, das ist der Witz an private: nur die Klasse in der die Variablen stehen hat Zugriff, alle anderen müssen nicht wissen, wie es dort drin aussieht.

Was sind denn das für Variablen? Vielleicht könnte man sie "protected" machen (so hat auch eine Unterklasse Zugriff), oder es gäbe noch andere Ansätze (abstrakte Methoden, Interfaces...).


----------



## Bob2 (10. Feb 2005)

Die erste Klasse ist :

```
class ListNode {
	Object data;
	ListNode next;

	//Konstruktor
	ListNode(Object o) { this( o, null ); }

	//Konstruktor
	ListNode(Object o, ListNode nextNode) {
		data = o;
		next = nextNode;
	}
	Object getObjecit() {return data;}
	ListNode getNext() {return next;}
	}// End Class List node


public class MyList {
	private ListNode firstNode;
	private ListNode lastNode;
	private String name; //Name des Liste
	/*
	 ListNode firstNode;
	 ListNode lastNode;
	 String name; //Name des Liste
	*/
	//Konstruktor fuer leere Liste mit Namen s
	public MyList(String s) {
	name = s;
	firstNode = lastNode = null;
	}//End Konstruktor

	//Default Konstruktor
	public MyList() { this( "Liste" ); }

	//Einsetzen eines Objektes an die erste Stelle
	public void insertAtFront(Object newdata) {
		if (isEmpty())
			firstNode = lastNode = new ListNode(newdata);
		else
			firstNode = new ListNode(newdata, firstNode);
	}//End insertAtFront

	//Einsetzen eines Objektes an die letzte Stelle
	public void insertAtBack(Object newdata) {
		if (isEmpty())
			firstNode = lastNode = new ListNode(newdata);
		else
			lastNode = lastNode.next = new ListNode(newdata);
	}//End insertAtBack

	/*public Object getObject(){
		return firstNode;
	} *///End getObject
	//Entfernen des ersten Nodes
	public Object removeFromFront() throws EmptyListException {
		Object removeItem = null;

	if (isEmpty())
		throw new EmptyListException(name);

	removeItem = firstNode.data; //Einlesen von data
	//Anpassen der Listen-Referenzen
	if (firstNode.equals(lastNode))
		firstNode = lastNode = null;
	else
		firstNode = firstNode.next;
	return removeItem;
	}//End removeFromFront


	//Entfernen des letzten Nodes
	public Object removeFromBack() throws EmptyListException {
		Object removeItem = null;

	if (isEmpty())
		throw new EmptyListException(name);

	removeItem = lastNode.data; //Einlesen von data
	//Anpassen der Listen-Referenzen
	if (firstNode.equals(lastNode))
		firstNode = lastNode = null;
	else {
		ListNode current = firstNode;

	//Durchwandern der Liste
	while (current.next != lastNode)
		current = current.next;
	lastNode = current;
	current.next = null;
	}//End else

	return removeItem;
	}//End removeFromBack

	// Feststellen, ob Liste leer ist
	public boolean isEmpty()
	{ return firstNode == null; }

	//Inhalt der Liste ausgeben
	public void print() {
		if (isEmpty()) {
		System.out.println(name + " ist leer.");
	return;
	}//End if

	System.out.println("Inhalt von " + name + ": " );
	ListNode current = firstNode;
	
	while (current != null) {
		System.out.print(current.data.toString() + " " );
		current = current.next;
	}//End while
	System.out.println( "\n" );
	}//End print
}//End MyList
```

Und ich möchte die private Variablen: 
	private ListNode firstNode;
	private ListNode lastNode;
in der folgenden vererbten Klasse:
	
	
	
	





```
DLNode prev;
	
	//Konstruktor
	public DLNode (Object o) {
	super (o);
	}//End Konstruktor

	//Konstruktor
	public DLNode (Object o, DLNode nextNode, DLNode prevNode) {
	super(o,nextNode);
	prev = prevNode;
}//End Konstruktor	
 
	DLNode getPrev() {return prev;}
}//End DLNode


class DoublyLinkedList extends MyList {
	
	 /*private ListNode firstNode;
	 private ListNode lastNode;
	 private String name;*/ //Name des Liste
	//Konstruktor fue leere Liste
	public DoublyLinkedList(String s) {
	super(s);
	}

	public DoublyLinkedList() {
	super();
	}
	
	//Festellen, ob das Objekt vorhanden ist
	public boolean isInList (Object o) {
	boolean exist = false;
	//firstNode = getObject();
	if (firstNode == null || firstNode.equals(lastNode)) {
	//if (firstNode.equals(lastNode))
		firstNode = lastNode = null;
	System.out.println( "Attention tout est null!" );
	}//End if
	else { 
		// current = firstNode;
		ListNode current = firstNode;
//		}//End else	
	
	System.out.println( "Correct!" );
	//Durchwandern der Liste
	//if (!(current.next == null || lastNode == null)) {
	do{ 
		current = current.next;
		if (current == o) 
		exist = true;
	}
	while (current.next != lastNode); 
	}//End if End else

	/*if (exist ==1 ) 
		System.out.println( o + " ist in der Liste.");
	else
		System.out.println( o + " ist NICHT in der Liste.");
	*/
	return exist;
	}//End isInList

	//Einsetzen eines Objektes bevor

/*	public void insertBefore(Object newdata, Objekt where) {
		if (isEmpty())
			firstNode = lastNode = new ListNode(newdata);
		else {
			firstNode = current;
	}//End else
	}//End insertAtFront
i*/

}//End DoublyLinkedList
```
Es ist so: in der ersten Klasse (MyList) ist die Methode: public void insertAtFront(Object newdata), die ein Objekt einsetzt. In der vererbten Klasse (zweites Code) DoublyLinkedList ist aber das Objekt nicht mehr zu finden. Die DoublyLinkedList hat die Methode public boolean isInList (Object o) und benützt die private Variable firstNode, aber irgendwas stimmt nicht, weil firstNode bei null bleibt obwohl es schon ein Objekt gibt.


----------



## Bob2 (10. Feb 2005)

Geschafft! Habe einfach eine get Methode geschrieben.


----------



## Manfred (10. Feb 2005)

> Indem du get/set-Methoden in der Superklasse schreibst (public), diese werden weitervererbt und können dann in der Subklasse benutzt werden. So kommst du an diese Werte



 :wink:


----------



## Bob2 (10. Feb 2005)

Danke!


----------

