Klasse vervollständigen

Velko

Mitglied
Hallo Leute,

ich habe eine Aufgabe bekommen, bei der ich die ersten lines der 8 Klassen implementieren soll.
Bei 7 habe ich es geschafft, jedoch die letzte Klasse bereitet mir Kopfschmerzen...

Und zwar die Klasse AutoDialer

(Foto falls übersichtlicher http://imgur.com/fNBeVus )

Java:
public class AutoDialer <T> extends AbstractConnection  implements Callable    {            //Noch in Bearbeitung class AutoDialer <T> extends AbstractConnection implements Callable >>> public abstract class AutoDialer <T>  implements Callable
  
    private Node<T> anchor;

    /*
     * insert an element at the first position
     */
    public void insert( T element ) {
        anchor = new Node<T>( element, anchor );
    }

    /*
     * call call() method on all elements contained in the list
     */
    public void callAll() {
        Node<T> iterator = anchor;
        while( iterator != null ) {
            iterator.getValue().call();
            iterator = iterator.getNext();
        }
    }
}

Java:
public class Test  {

    private static void test1() {
        AutoDialer<Person> dialer = new AutoDialer<Person>();
        dialer.insert( new Person( "Mrs. X" ) );
        dialer.insert( new Person( "Mr. Y" ) );
        dialer.callAll();
    }

    private static void test2() {
        AutoDialer<AbstractConnection> dialer = new AutoDialer<AbstractConnection>();

        dialer.insert( new Mail( new Person( "Mrs. X" ) ) );
        dialer.insert( new Phone( new Person( "Mr. Y" ) ) );
        dialer.callAll();
    }

    public static void main( String[] args ) {
        test1();
        test2();
    }
}


Java:
public abstract class AbstractConnection {            //FERTIG
  
    public final String type;
    private Person person;

    protected AbstractConnection( String type, Person person ) {
        this.type = type;
        this.person = person;
    }

    public Person getPerson() {
        return person;
    }

    protected abstract void connect();

    /*
     * establish a connection (implemented in subclass) and then call the person
     */
    public void call() {
        connect();
        getPerson().call();
    }
}


Also die erste Zeile bei AutoDialer (Die Klasszeile) bereitet mir kopfschmerzen...
 
Zuletzt bearbeitet von einem Moderator:
1.Deine AutoDialer Klasse erbt von AbstractConnection, also muss sie die abstrakte connect() Methode implementieren.

2. Du erstellst ein Objekt der Klasse AutoDialer über den Konstruktur ohne Parameter. Der ist aber garnicht definiert. Deine AutoDialer Klasse braucht einen Konstruktor 'public AutoDialer(){}'.

3. Wäre gut wenn man deine Node Klasse mal kennen würde. Deine getValue Methode soll vermutlich irgendein Callable zurückgeben. Im Moment gibst du ein Objekt vom Typ T zurück, aber T implementiert nicht Callable.
Du möchtest vllt eher sowas machen:
Java:
public class AutoDialer <T extends Callable> extends AbstractConnection
 
Java:
public class Node <T>  {                //Fertig
    private T value;
    private Node<T> next;

    public Node( T value, Node<T> anchor ) {
        this.value = value;
        this.next = anchor;
    }

    public T getValue() { return value; }
    public Node<T> getNext() { return next; }
}
Java:
interface Callable  {            //Fertig
    void call();         
}

Zu deinem 2 Punkt, uns ist nur gestattet die oberste Zeile hinzuzufügen bzw. zu ändern
also in dem Fall bei Autodialer "public class AutoDialer <T> extends AbstractConnection implements Callable {" Die muss irgendwie so geändert werden, dass sie keine Macken mehr hat
 
Zuletzt bearbeitet von einem Moderator:
Lies nochmal meinen ersten Beitrag. Der Compiler sagt dir doch schon was falsch ist.
Du versuchst an einem Objekt vom Typ 'T' die Methode 'call()' aufzurufen, aber T implementiert nicht das Callable Interface.
 
Ich lese auch die Ausgaben des Compilers und versuche drauf einzugehen...
Wenn ich aber beim Interface <T> hinzufüge, klappt es auch nicht...
 
Die Lösung steht schon in meinem ersten Beitrag.

Der generische Typ T der Klasse AutoDialer muss das Interface implementieren und nicht die Klasse AutoDialer an sich. Wie das geht steht schon oben.
 
Also wenn ich das so eintippe wie du es sagt Eclipse sowas wie
"java implicit super constructor object() is undefined for default constructor"
und
"java implicit super constructor AbstractConnection() is undefined for default constructor must define an explicit konstruktor "
 

Neue Themen


Zurück
Oben