Wie kann ich eine abstracte klasse mit einer main Klasse verbinden?

2 Antworten

Indem du eine konkrete Klasse erstellst, die von der abstrakten Klasse erbt. Also z.B. ein BattleShip oder ein FisherBoat. ;) Und diese konkreten Klassen kannst du dann in deinem Hauptprogramm einsetzen (wie in deiner letzten Frage erklärt). Es ist der Sinn einer abstrakten Klasse, dass man diese nicht erzeugen kann.

Mach dich mal darüber schlau, was "abstract" bedeutet. Wenn du eine Pizza-Bäckerei programmierst, dann könnte man das so machen, dass du eine abstrakte PizzaBasis-Klasse hat, die weiß, wie man eine Pizza backt. Du willst diese leere Pizza aber niemals erzeugen, deswegen ist sie abstrakt. Ein leerer Pizzateig ist sinnlos.

Wenn du dir nun wegen meiner zwei Klassen "PizzaSalami" und "PizzaHawaii" anlegst, die beide von PizzaBasis erben, dann wissen diese Klassen von der Eltern-Klasse, wie man gebacken wird, haben aber zusätzlich noch ihre eigenen Eigenschaften und Beläge. (Ich weiß, dass der Entwurf nicht optimal ist).

Erstelle eine konkrete Subklasse der abstrakten Klasse und von dieser dann eine Instanz.

public class Steamboat extends Ship {
  
public Steamboat(String type, int width, int length) { super(type, width, length); }
public Steamboat(String type, int length, int width, int score, int damage){ super(type, length, width, score, damage); } }
// in main: Ship ship = new Steamboat("steamboat", 100, 100);

Abstrakte Klassen können nicht erzeugt werden, das verbietet bereits die Logik. So gibt es in unserer Welt bspw. keine Instanz eines Tieres, denn das Wort Tier ist nur eine abstrakte Bezeichnung für eine Gruppe von Lebewesen. Von einem Tier gibt es in der realen Welt nur Instanzen eines konkreten Typs (wie z.B. Giraffe, Elefant, usw.).

Mir sind übrigens noch einige Dinge an deinem Code aufgefallen, die verbesserungswürdig sind.

1) Tippfehler: length statt lenght

2) Was ist das für eine seltsame Konvention?

length_


Private Attribute werden wenn eigentlich mit einem führenden Unterstrich gekennzeichnet. Letzten Endes ist es aber natürlich dir überlassen.

3) Keines der verwendeten Attribute hast du irgendwo deklariert.

4) Was soll das bitte werden?

public void ShipAll(){
this.Ship();
}


Es ist bereits befremdlich, dass du Methodennamen plötzlich mit Großbuchstaben beginnst, doch dann versuchst du auch noch einen nicht existenten Konstruktor über this aufzurufen?

Verbindung von Netzwerken, wer kann mir den Sinn von folgenden Geräten erklären (siehe unten)?

Also ich schreib bald Abitur in meiner Fachrichtung (IT) und weiß die Funktion folgender Geräte noch nicht, das muss ich aber drauf haben:

Repeater, Hub, Switch, Bridge, Netzwerkkarte, Router, Gateway, Proxy

Also was ein Router ist weiß ich das ist wie zu Hause der dich ans Internet verbindet. Ein Switch weiß ich auch was das ist, ein Switch erweitert nur die Ports am Router mehr nicht, zb wenn der Router nur 4 Eingänge für LAN Kabel hat dann kann man sich eine Switch mit 20 Eingängen kaufen und halt mehr Geräte anschließen. Eine netzwerkkarte weiß ich auch was das ist die dient ja zum senden der Netzwerkdaten etc aber was ist der Rest?

Was ist ein repeater? Welchen Zweck hat er? Was ist eine Bridge, Gateway, Hub, USW? Bei mir zu Hause gibt’s keine Bridge, keinen hub, keine Gateway und wir haben dennoch Internet also was ist der Sinn dieser Geräte?

Mit freundlichen Grüßen

...zur Frage

Variable von einer Klasse in eine andere Übergeben?

Hallo zusammen,

ich programmiere gerade in Java und habe ein kleines Problem.

ich habe 3 neue Klassen erzeugt. Nur die erste Klasse besitzt eine main-Methode. Nun wollte ich die in der main Methode erzeuge Zufallszahl an die dritte Klasse übergeben um dort etwas damit zu machen.

Leider weiß ich nicht wie das geht.

Anbei der Sourcecode:

Hier die Klasse mit der Main-Methode:

package Klassen;

import java.awt.Graphics;
import javax.swing.JPanel;

public class HauptFenster {

    
    public static void main(String[] args) {
        
        Fenster fenster = new Fenster();
        Rechteck panel = new Rechteck();
        
        fenster.add(panel);
        
        while(true){
        
            int high = (int)(Math.random()*200);
            int width = (int)(Math.random()*150);
            
        }
    }
}

Hier die Klasse 3:

package Klassen;

import java.awt.Graphics;
import javax.swing.JPanel;

public class Rechteck extends JPanel {
    
public int zufall;
    
    public Rechteck(){
        
        this.setSize(500, 500);
    }

    public void paint (Graphics g){
        g.fillRect(120, 100, 100, 130);
    }
}

Die Beispiel soll nur zur Übung dienen.

MfG

...zur Frage

Wie sieht die Punktnotation in Java aus oder wie kann ich auf auf andere Klassen zugreifen?

Wie kann ich in der Klasse Telefon die Methoden aus der Klasse Telefonbuch verwenden ? Wenn ich es mit Punktnotation versuche wie z.B.

public void eintrag_hinzufuegen(String name)
{
    Telefonbuch.hinzufuegen(name);
}

, kommt die Fehlermeldung : non static method cannot be referenced from a static context

1)

import java.util.ArrayList;
public class Telefon
{
protected ArrayList <Telefonbuch> telefonbuch;
protected boolean eingeschaltet;
        
        public Telefon()
    {
        // initialise instance variables
        telefonbuch = new ArrayList <Telefonbuch>();
    }
    
    public void anrufen (String name)
    {
    }
    
    public void einschalten()
    {
        eingeschaltet = true;
    }
    
    public void telefonbuch_uebersicht()
    {
        
    }
    
    public void eintrag_hinzufuegen(String name)
    {
    }
    
    public void eintrag_entfernen(String name)
    {
    }
    
    public boolean eintrag_suchen(String name)
    {
    }
}

2)

import java.util.Arrays;

/**
 * Write a description of class Telefonbuch here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Telefonbuch
{
    // instance variables - replace the example below with your own
    private int anzahl_eintrag;
    private int kapazitaet;
    private String[] name_liste;
    protected boolean gefunden;

    /**
     * Constructor for objects of class Telefonbuch
     */
    public Telefonbuch()
    {
        // initialise instance variables
        String [] name_liste = new String[kapazitaet];
        gefunden = false;
    }
    
    public void set_kapazitaet(int x)
    {
        kapazitaet = x;
    }
    
    public void telefonbuch_uebersicht()
    {
        for(int i=0; i < name_liste.length; i++)
        {
        System.out.println(name_liste[i]);
        }
    }
    
    public void hinzufuegen(String name)
    {
        
    }
    
    public void entfernen(String name)
    {
    }
    
    public boolean suchen(String name)
    {
        for(int i=0; i < name_liste.length; i++)
        {
         if(name_liste[i].equals(name))
         {
         gefunden = true;
         }
         else
         {
         //Abbruch
         }
        }
        return gefunden;
    }
}

...zur Frage

Java:Programm für Würfel

Hallo erstmal! Ich muss ein Java-Programm schreiben,in dem die Funktionen wurf() ,augen() (diese soll spezifisch dazu deinen,den wert als int zurückzugeben) und eine Funktion public static int augensumme(Wuerfel w1, Wuerfel w2) implementiert sind. Ich bin damit auch soweit durch,wollte dann jedoch das Programm testen und habe bemerkt,dass ich die main-methode vergessen habe. Jetzt versuche ich,die Zeile public static void main (String[] args) { hinzuzufügen,sobald ich jedoch die geschweifte Klammer setze,zeigt mir NetBeans massig "illegal start of expression" an. Wie kann ich das vermeiden und mein Programm lauffähig machen?

Hier der Code: import java.math.*; public class Wuerfel {

public int w1;
public int w2;

        public  Wuerfel() {
            wurf();  
        }
        
        public void wurf() {
            w1 = (int)(Math.random()*6) + 1;
            w2 = (int)(Math.random()*6) + 1;
        }
        
         public int augen() {
            return w1;
        }
         
     
        
    Falls sonstige Verbesserungsvorschläge gemacht werden,bin ich natürlich auch für diese dankbar!
...zur Frage

Fehler in leichtem Javascript, wo ist er?

import java.util.Scanner;

public class Antwortscanner{ // Anfang Methoden public static void main (String [] args){ System.out.println("Wie alt bist du?"); Scanner input = new Scanner(System.in); String Alter = input.nextInt();

if (Alter <= 18)
{      
  System.out.println("Du bist aber Jung :^)");
  }
else{
  System.out.println("Alter Knacker");
}

} }

Fehlerquelle: Antwortscanner.java:8:33: error: incompatible types: int cannot be converted to String String Alter = input.nextInt(); ^ Antwortscanner.java:10:15: error: bad operand types for binary operator '<=' if (Alter <= 18) ^ first type: String second type: int

...zur Frage

Wie lerne ich Programmier-Basics?

Ich würde gerne mal ausprobieren zu programmieren, aber da es so viele verschiedene Sprachen gibt, bin ich etwas überfordert und weiß nicht direkt wo ich anfangen soll, vorallem weil ich zuerst noch die Basics lernen sollte. Wie kann ich das am besten machen? Oder soll ich gleich mit einer Sprache wie z.B Java beginnen? Gibt es dazu gute Youtube Kanäle oder Internet Seiten? Danke schonmal

...zur Frage

Was möchtest Du wissen?