Abstrakte Klassen

David2456

Aktives Mitglied
Hallo
Ich bräuchte Hilfe bei folgender Aufgabe.
1) Stimmt das so mit der abstrakten Klasse und den Unterklassen?
2) Versuche mich grade an dem printInformations . Wie werden denn die Werte hinter dem new Object übergeben? Bzw. wie schreibe ich diese Methode?

Hauptprogramm
Java:
public class Main {

    public static void main(String[] args) {
    // Has to be a syntax error:
    // CommunicationDevice c = new CommunicationDevice("c");

    CommunicationDevice compA = new Computer("Comp A", "0.0.0.1");
    CommunicationDevice compB = new Computer("Comp B", "0.0.0.2");
    CommunicationDevice phoneA = new SmartPhone("SmartPhone A");
    CommunicationDevice phoneB = new SmartPhone("SmartPhone B");
    CommunicationDevice faxA = new Fax("Fax A", "1234");
    CommunicationDevice faxB = new Fax("Fax B", "5678");
   
   // compA.addContact(phoneA);
   // compA.addContact(faxA);
   
    Out.println("//generated by printInformations()-calls:");
    compA.printInformations();
    compB.printInformations();
    phoneA.printInformations();
    phoneB.printInformations();
    faxA.printInformations();
    faxB.printInformations();
   
   /* Out.println();
    Out.println("//generated by compA.receiveMessage(compB):");
    compA.receiveMessage(compB);
    Out.println();
   
    Out.println("//generated by compB.sendMessage(compA):");
    compB.sendMessage(compA);
    Out.println("//generated by phoneB.sendMessage(faxB):");
    phoneB.sendMessage(faxB);
    Out.println("//generated by phoneB.sendMessage(compB):");
    phoneB.sendMessage(compB);
    Out.println("//generated by faxB.sendMessage(compB):");
    faxB.sendMessage(compB);

    Out.println("//generated by compA.broadcast():");
    compA.broadcast();
    */
    }
   
}
Abstrakte Oberklasse
Java:
abstract class CommunicationDevice {

        //void addContact();
       // void printInformations();                 
       // void receivedMessage();
        //void sendMessage();
        //void broadcast();
       
       
}

Unterklasse
Java:
public class Computer {

        private String Name;
        private int IP;

        //void addContact();
        // void printInformations();   
        //void receivedMessage();
        //void sendMessage();
        //void broadcast();
       
       
}

Unterklasse
Java:
public class Smartphone {

        private String Name;
       

        //void addContact();
        // void printInformations();   
       // void receivedMessage();
       // void sendMessage();
       // void broadcast();
}

Unterklasse
Java:
public class Fax {
       
        private String Name;
        private int FaxNumber;

       
       // void addContact();
        // void printInformations();   
       // void receivedMessage();
       // void sendMessage();
        //void broadcast();
}

Danke schonmal
 

Anhänge

  • 1.JPG
    1.JPG
    106,2 KB · Aufrufe: 25
  • 2.JPG
    2.JPG
    104,8 KB · Aufrufe: 23
  • 3.JPG
    3.JPG
    100,5 KB · Aufrufe: 24

Joose

Top Contributor
1) Stimmt das so mit der abstrakten Klasse und den Unterklassen?

Nein, du hast hier einfach eine abstrakte Klasse und 3 nicht abstrakte Klassen, welche in keinen Zusammenhang stehen.
Du solltest die 3 nicht abstrakten Klassen vielleicht noch von der abstrakten Klassen erben lassen :) (Stichwort: extends)

2) Versuche mich grade an dem printInformations . Wie werden denn die Werte hinter dem new Object übergeben? Bzw. wie schreibe ich diese Methode?

Was soll die Frage "Wie werden denn die Werte hinter dem new Object übergeben?" bedeuten? Welche Werte? Hinter welchem "new Object"?
Die Methode "printInformations" gibt einfach Sachen auf der Konsole aus. Sprich die abstrakte Basisklasse deklariert dazu eine abstrakte Methode (damit wird jedes Unterklasse gezwungen diese zu implementieren) und in der Unterklasse implementierst du diese Methode das entsprechende Ausgabe rauskommt.
 

David2456

Aktives Mitglied
Ok das mit den Klassen habe ich jetzt verstanden. Danke dir.
Aber ich habe ja jetzt in meinem Main.java das hier
CommunicationDevice compA = new Computer("Comp A", "0.0.0.1");
nun will ich das die Werte in der Klammer in die Klasse Computer.java übergeben werde. Sprich wenn ich in Computer.java in meiner printInformations Out.println(Name + IP ), schreibe das dann die übergebenden Werte ausgegeben werden. Ich habe das ja schon einmal mit einer get und set Methode gemacht, aber ich weiß nicht wie ich das hierdrauf anwenden soll.
 
K

kneitzel

Gast
Schau Dir doch einmal Konstruktoren an. Was Dir fehlt sind die entsprechenden Konstruktoren, die die Werte, die da übergeben wurden, abspeichern.
 

David2456

Aktives Mitglied
Jetzt habe ich ein Konstruktor welcher die Werte speichert. Jetzt kriege ich aber die fehlermeldung das meine Klasse Computer nicht abtsrakt ist. Was muss ich hinzufügen? Noch ein Konstruktor in Computer oder die Variablen oder...?
Main.java wie oben

Java:
public abstract class CommunicationDevice {
        public String Name;
        public String IP;
      
        //void addContact();
      
        public CommunicationDevice(String N, String i){
            Name = N;
            IP = i;
        }

        public abstract void  printInformations(); 
                       
       // void receivedMessage();
        //void sendMessage();
        //void broadcast(); 
}

Java:
public  class Computer extends CommunicationDevice {
        //void addContact();

         void printInformations(String Name, String IP){
            Out.println(Name + IP);
         }
       
        //void receivedMessage();
        //void sendMessage();
        //void broadcast();
}
 
Zuletzt bearbeitet von einem Moderator:
K

kneitzel

Gast
Du brauchst auch einen entsprechenden Konstruktor in Computer. Du willst doch new Computer(Arguments) machen ... also reicht der Standard Konstruktor nicht.
 

David2456

Aktives Mitglied
Danke dir. printInformations funktioniert jetzt. Mein nächstes Problem wäre die addContact Methode. Soll ich dazu die Kontakte in einem Array speichern? Wenn ja wie? Zudem kann mir einer den Fehler hierbei erklären? method in addContact can not be applied to given types: actuel and former lists differ length (ich weiß in der Methode steht nichts, aber sollte nicht trotzdem der Fehler ausgegeben werden sondern ein andere z.B missing body type?)

Java:
//Main
public class Main {

    public static void main(String[] args) {
    // Has to be a syntax error:
    // CommunicationDevice c = new CommunicationDevice("c");

    CommunicationDevice compA = new Computer("Comp A", "0.0.0.1");
    CommunicationDevice compB = new Computer("Comp B", "0.0.0.2");
    CommunicationDevice phoneA = new SmartPhone("SmartPhone A");
    CommunicationDevice phoneB = new SmartPhone("SmartPhone B");
    CommunicationDevice faxA = new Fax("Fax A", "1234");
    CommunicationDevice faxB = new Fax("Fax B", "5678");
   
    compA.addContact(phoneA);
    compA.addContact(faxA);
   
    Out.println("//generated by printInformations()-calls:");
    compA.printInformations();
    compB.printInformations();
    phoneA.printInformations();
    phoneB.printInformations();
    faxA.printInformations();
    faxB.printInformations();
   
   /* Out.println();
    Out.println("//generated by compA.receiveMessage(compB):");
    compA.receiveMessage(compB);
    Out.println();
   
    Out.println("//generated by compB.sendMessage(compA):");
    compB.sendMessage(compA);
    Out.println("//generated by phoneB.sendMessage(faxB):");
    phoneB.sendMessage(faxB);
    Out.println("//generated by phoneB.sendMessage(compB):");
    phoneB.sendMessage(compB);
    Out.println("//generated by faxB.sendMessage(compB):");
    faxB.sendMessage(compB);

    Out.println("//generated by compA.broadcast():");
    compA.broadcast();
    */
    }
   
}

Java:
//CommunicationDevice
public abstract class CommunicationDevice {

        public String Name;
        public String IP;
       
         public CommunicationDevice(){
           
        }
       
       
       
        public abstract void addContact();
       
      
       
        public abstract void printInformations();
           
       
                        
        //public abstract void receivedMessage();
        //public abstract void sendMessage();
        //public abstract void broadcast();
       
       
}

Java:
//Computer
public class Computer extends CommunicationDevice {

      
  
        public Computer(String N, String i){
            Name = N;
            IP = i;
        }
        
         public void addContact(){

           
        }
        
         public void printInformations(){
            Out.println(Name + " (" + IP + ")");         
         }
        
        //public void receivedMessage();
        //public void sendMessage();
        //public void broadcast();
       
       
}

Java:
//SmartPhone
public class SmartPhone extends CommunicationDevice {

       
       

        //public void addContact();
       
         public SmartPhone(String N){
            Name = N;          
        }
       
        public void printInformations(){
            Out.println(Name);         
         }
       //public void receivedMessage();
       //public void sendMessage();
       //public void broadcast();
}

Java:
//Fax
public class Fax extends CommunicationDevice {
       
       
        public Fax(String N, String i){
            Name = N;
            IP = i;
        }

       
       //public void addContact();
      
        public void printInformations(){
            Out.println(Name + ", number = " + IP);         
         }
       //public void receivedMessage();
       //public void sendMessage();
       //public void broadcast();
}
 

Joose

Top Contributor
Mein nächstes Problem wäre die addContact Methode. Soll ich dazu die Kontakte in einem Array speichern? Wenn ja wie?

Ja ein Array oder eine Liste bieten sich hier an.
Hast du noch nicht mit Arrays gearbeitet? -> http://www.java-tutorial.org/arrays.html

Zudem kann mir einer den Fehler hierbei erklären? method in addContact can not be applied to given types: actuel and former lists differ length (ich weiß in der Methode steht nichts, aber sollte nicht trotzdem der Fehler ausgegeben werden sondern ein andere z.B missing body type?)

Deine Methode "addContact" hat keine Parameter, du gibst aber beim Aufruf dieser Methode einen Parameter mit. Du solltest daher die Deklaration der Methode überdenken und einen Parameter hinzufügen.
 

Neue Themen


Oben