Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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...
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...
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
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
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.
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 "
Am besten Mal diesen Vorschlag umsetzen.
Du darfst dein AutoDialer Objekt nicht ohne Übergabeparameter initialisieren weil es den Konstruktor nicht gibt.