Inner class and interface question (I posted some really long code)

C

Chad

I'm want to put the getHead() method in the BagInterface. However, I
can't do this because the compiler keeps saying it can't find 'class
Node' in Location BagInterface<T>. I guess this is because Node is an
inner class of my LinkedList class. Ideas how to fix this? Ideally I
want to preserve the inner class. Below is the complete working code
in question.

public class Main {

public static void main(String[] args) {
BagInterface <Integer> list = new LinkedList <Integer>();
list.add(new Integer(1));
list.add(new Integer(2));
list.add(new Integer(100));
list.add(new Integer(100));
list.add(new Integer(100));
list.add(new Integer(100));
list.add(new Integer(99));
list.add(new Integer(11));
list.printMe();
//System.out.println("The sum is " +
list.sumMe(list.getHead()));

}//end main
}

interface BagInterface<T> {
public void add(T newData);
public void printMe();
public Node getHead(); //<---Problem Line

}

class LinkedList<T> implements BagInterface<T>{

private Node firstNode;
private int numberOfEntries;

public LinkedList() {
firstNode = null;
numberOfEntries = 0;
}

class Node {

private T data;
Node next;

Node(T newData) {
this(newData, null);
}

Node(T newData, Node nextNode) {
data = newData;
next = nextNode;
}

Node getHead() {
return firstNode;
}
}//end class Node


public Node getNext() {
return firstNode.next;
}

public Node getHead() {
return firstNode;
}

public void add(T newData) {
Node newNode = new Node(newData);
newNode.next = firstNode;
firstNode = newNode;
numberOfEntries++;
}//end add

public void printMe() {
Node current = firstNode;

while (current != null) {
System.out.println(current.data);
current = current.next;
}
}

}
 
D

Daniel Pitts

I'm want to put the getHead() method in the BagInterface. However, I
can't do this because the compiler keeps saying it can't find 'class
Node' in Location BagInterface<T>. I guess this is because Node is an
inner class of my LinkedList class. Ideas how to fix this? Ideally I
want to preserve the inner class. Below is the complete working code
in question.

public class Main {

public static void main(String[] args) {
BagInterface<Integer> list = new LinkedList<Integer>();
list.add(new Integer(1));
list.add(new Integer(2));
list.add(new Integer(100));
list.add(new Integer(100));
list.add(new Integer(100));
list.add(new Integer(100));
list.add(new Integer(99));
list.add(new Integer(11));
list.printMe();
//System.out.println("The sum is " +
list.sumMe(list.getHead()));

}//end main
}

interface BagInterface<T> {
public void add(T newData);
public void printMe();
public Node getHead(); //<---Problem Line

}
[snip]
Node is specific to LinkedList, and doesn't belong in Bag. As a matter
of fact, "getHead()" doesn't make sense in Bag at all, and on top of
that, exposing "Node" out of a collection class seems to me to be a very
bad leaking of encapsulation
 
G

GGolf

I'm want to put the getHead() method in the BagInterface. However, I
can't do this because the compiler keeps saying it can't find 'class
Node' in Location BagInterface<T>. I guess this is because Node is an
inner class of my LinkedList class. Ideas how to fix this? Ideally I
want to preserve the inner class.

Referencing an inner class in the way you have described doesn't seem
quite right. An interface shouldn't have any knowledge of its
implementors. You should probably extract the class so that it's no
longer an inner class.
 
R

Roedy Green

public Node getHead(); //<---Problem Line

That means "I promise to implement a getHead method in any class that
implements BagInterface<T>

I don't see such a method in LinkedList<T>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top