{"id":608,"date":"2018-11-27T17:00:43","date_gmt":"2018-11-27T16:00:43","guid":{"rendered":"https:\/\/freizone.net\/java-einfach-lernen\/?p=608"},"modified":"2020-05-11T19:29:39","modified_gmt":"2020-05-11T17:29:39","slug":"aufbau-einer-klasse","status":"publish","type":"post","link":"https:\/\/freizone.net\/java-einfach-lernen\/2018\/11\/27\/aufbau-einer-klasse\/","title":{"rendered":"Aufbau einer Klasse"},"content":{"rendered":"<p>Eine Klasse ist die Beschreibung des Datentyps Objekt. Ein Objekt wird dazu verwendet Daten zu formen indem ihnen ein spezieller Zweck zugeordnet wird. Dies geschieht mithilfe von Methoden.<br \/>\nEin kleines Raumschiff in einem Computerspiel k\u00f6nnte z. B. die Daten f\u00fcr die Position auf dem Bildschirm haben, also die X und Y-Koordinaten. Und vier Methoden zum bewegen in vier verschiedene Richtungen (Beispiel weiter unten).<br \/>\nEine Klasse hat folgenden Aufbau (zwingende Angaben gr\u00fcn, optionale grau):<\/p>\n<p><strong><span style=\"color: #008000;\"><span style=\"color: #999999;\">modifikator<\/span> class Name <span style=\"color: #999999;\">Erweiterung Implementierungen<br \/>\n<\/span><\/span><\/strong><strong><span style=\"color: #008000;\">{<\/span><\/strong><br \/>\n<strong><span style=\"color: #008000;\">Datenblock<\/span><\/strong><br \/>\n<strong><span style=\"color: #008000;\">Konstruktorblock<\/span><\/strong><br \/>\n<strong><span style=\"color: #008000;\">Methodenblock<\/span><\/strong><br \/>\n<strong><span style=\"font-size: 1rem; color: #008000;\">}<\/span><\/strong><\/p>\n<p>Der <strong><em>Modifikator<\/em><\/strong><em>\u00a0(protected, private oder public)\u00a0<\/em>regelt den Zugriff auf die Klasse. Ist kein Modifikator angegeben so ist die Klasse immer protected, d.h. die Klasse ist f\u00fcr alle anderen Klassen und Unterklassen des selben Packages sichtbar.<br \/>\nDas Schl\u00fcsselwort <strong><em>class<\/em> <\/strong>steht daf\u00fcr das es sich um eine Klasse handelt. Es ist auch noch interface m\u00f6glich was dann bewirkt das es sich wie der Name sagt um ein Interface handelt. Genaueres im Kapitel Interface.<br \/>\n<strong><em>Name<\/em> <\/strong>ist die Bezeichnung der Klasse, und sollte ohne Umlaute und immer gro\u00dfgeschrieben sein.<br \/>\nDie <strong><em>Erweiterung<\/em> <\/strong>bestehend aus dem Schl\u00fcsselwort <em><strong>extends<\/strong> <\/em>gefolgt von einer Klasse, bezeichnet die Elternklasse. Die Klasse erbt von der Elternklasse auch Superklasse genannt, alle Daten und Methoden. Es kann nur von einer einzigen Klasse geerbt werden.<br \/>\nIm Gegensatz zur Elternklasse kann es beliebig viele\u00a0<em><strong>Implementierungen <\/strong><\/em>geben<em><strong>. <\/strong><\/em>Diese bestehen aus dem Schl\u00fcsselwort implements gefolgt von einem Interface und stellen weitere <em>Methodendeklarationen (Methoden mit leerem Anweisungsblock, der vom Programmierer vervollst\u00e4ndigt werden muss)<\/em>\u00a0und <em>Konstanten (Eine Variable mit unver\u00e4nderlichen Wert, also nicht mehr variable sondern konstant)<\/em>\u00a0f\u00fcr spezielle Zwecke zur Verf\u00fcgung.<br \/>\nDer\u00a0<em><strong>Datenblock<\/strong> <\/em>wird in der Regel am Anfang der Klasse aufgef\u00fchrt und kann eine beliebige Anzahl von allen Arten von Datentypen enthalten (Variable, Konstanten, aber auch Objekte) beinhalten.<br \/>\nIm <em><strong>Konstruktorblock<\/strong> <\/em>wird der Standardkonstruktor aufgef\u00fchrt. Au\u00dferdem kann der Konstruktor \u00fcberladen werden, d.h. es k\u00f6nnen mehrere Konstruktoren aufgef\u00fchrt werden, um beispielsweise gleich bei der Erstellung des Objekts die Daten zu ver\u00e4ndern oder eine bestimmte Methode aufzurufen.<br \/>\nDer\u00a0<em><strong>Methodenblock\u00a0<\/strong><\/em>kommt in der Regel nach dem Konstruktorblock und enth\u00e4lt eine beliebige Anzahl Methoden zur Manipulation der Daten.<\/p>\n<p><strong><span style=\"font-size: 1rem; color: #008000;\"><br \/>\n<\/span><\/strong><span style=\"font-size: 1rem; color: #000000;\">Eine typische Klasse mit \u00fcberladenem Konstruktor k\u00f6nnte z.B. so aussehen (Schl\u00fcsselw\u00f6rter gr\u00fcn, Variablennamen kursiv):<\/span><\/p>\n<p><strong><span style=\"color: #008000;\">class <span style=\"color: #999999;\">Beispiel\u00a0<\/span><\/span><\/strong><strong><span style=\"color: #008000;\">{<br \/>\n<\/span><\/strong><strong><br \/>\n<span style=\"color: #008000;\">String\u00a0<\/span><\/strong><span style=\"color: #999999;\"><strong><em>text<\/em> = &#8222;Hallo Welt&#8220;;<\/strong><\/span><span style=\"font-size: 1rem; color: #008000;\"><strong><span style=\"color: #008000;\"><span style=\"color: #999999;\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/span><\/span><\/strong><span style=\"color: #008000;\"><span style=\"color: #999999;\">\/\/ <\/span><\/span><span style=\"color: #008000;\"><span style=\"color: #999999;\">Variablendeklaration<\/span><\/span><strong><span style=\"color: #008000;\"><span style=\"color: #999999;\"><br \/>\n<\/span><\/span><\/strong><\/span><\/p>\n<p><span style=\"font-size: 1rem; color: #008000;\"><strong>\u00a0public <span style=\"color: #999999;\">Beispiel<\/span>() {}\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/strong><span style=\"color: #999999;\">\/\/\u00a0<\/span><span style=\"color: #999999;\">Standardkonstruktor<\/span><\/span><\/p>\n<p><strong><span style=\"color: #008000;\">\u00a0public <span style=\"color: #999999;\">Beispiel<\/span>(String <span style=\"color: #999999;\"><em>text<\/em><\/span>) {\u00a0 <span style=\"color: #999999;\">\u00a0<\/span><\/span><\/strong><span style=\"color: #999999;\">\/\/ weiterer Konstruktor zum \u00e4ndern von <em>text<\/em> bei Objektbildung<\/span><strong><span style=\"color: #008000;\"><br \/>\nthis.<span style=\"color: #999999;\"><em>text = text;<\/em><\/span><br \/>\n}<\/span><\/strong><\/p>\n<p><strong style=\"font-size: 1rem;\">\u00a0<span style=\"color: #008000;\">public void<\/span> <span style=\"color: #999999;\">Ausgabe<\/span>() {\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/strong> <span style=\"color: #999999;\">\u00a0\/\/ Methode zur Ausgabe der Variable <em>text<\/em>.<\/span><strong style=\"font-size: 1rem;\"><br \/>\n<span style=\"color: #999999;\">\u00a0System.out.println(this.<\/span><em><span style=\"color: #999999;\">text<\/span><\/em>);<br \/>\n<\/strong><span style=\"font-size: 1rem; color: #008000;\"><strong style=\"font-size: 1rem;\">\u00a0}<br \/>\n<\/strong><\/span><strong><span style=\"color: #008000;\">}<br \/>\n<\/span><\/strong><\/p>\n<p>In nachfolgendem Beispiel werden zwei Klassen erstellt. <em>Weltraum<\/em> und <em>Raumschiff<\/em>. Die Klasse Weltraum ist ein Fenster das ein unsichtbares Eingabefeld und eine schwarze Fl\u00e4che enth\u00e4lt. Auf der schwarzen Fl\u00e4che wird wird ein Objekt der Klasse Raumschiff gesetzt, das mit den Cursor-Tasten gesteuert werden kann.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">package klassenbeispiel;\r\n\r\nimport java.awt.BorderLayout;\r\nimport java.awt.Color;\r\nimport java.awt.Graphics;\r\nimport java.awt.event.KeyEvent;\r\nimport java.awt.event.KeyListener;\r\n\r\nimport javax.swing.JFrame;\r\nimport javax.swing.JPanel;\r\nimport javax.swing.JTextField;\r\n\r\npublic class Weltall extends JFrame implements KeyListener {\r\n\r\n  \/*\r\n   * Deklaration von raumschiff. Der Computer reserviert Speicher f\u00fcr eine\r\n   * Variable vom Typ Raumschiff\r\n   *\/\r\n  Raumschiff ufo;\r\n  JTextField eingabefeld;\r\n  JPanel p;\r\n\r\n  \/*\r\n   * Die Einstiegsmethode hat mit der Klasse Weltall selbst, nichts zu tun. Sie\r\n   * zeigt dem Compiler nur wo er beginnt, wo der Programmeinstieg ist.\r\n   *\/\r\n  public static void main(String[] args) {\r\n    new Weltall(); \/\/ Es wird ein Objekt der Klasse Weltall gebildet.\r\n  }\r\n\r\n  \/* Konstruktor der Klasse *\/\r\n  public Weltall() {\r\n    init(); \/\/ ruft die Methode init() auf\r\n  }\r\n\r\n  \/*\r\n   * Die Methode init() definiert das Aussehen des Fensters, erstellt ein\r\n   * Raumschiff, ein Eingabefeld mit Keylistener und setzt anschlie\u00dfend das\r\n   * Raumschiff ins \"Weltall\"\r\n   *\/\r\n  public void init() {\r\n    this.setDefaultCloseOperation(EXIT_ON_CLOSE);\r\n    this.setBounds(0, 0, 1000, 500);\r\n    this.setLocationRelativeTo(null);\r\n    this.setAlwaysOnTop(true);\r\n    this.setLayout(new BorderLayout());\r\n    this.getContentPane().setBackground(Color.BLACK);\r\n\r\n    ufo = new Raumschiff(); \/\/ erstellt ein Objekt vom Typ Raumschiff\r\n\r\n    eingabefeld = new JTextField(); \/\/ erstellt ein Eingabefeld..\r\n    eingabefeld.addKeyListener(this); \/\/ ..indem ein Textfeld mit einem KeyListener versehen wird.\r\n\r\n    this.add(eingabefeld, BorderLayout.NORTH); \/\/ anschlie\u00dfend wird es aufs Fenster, an den oberen Rand gesetzt\r\n\r\n    this.getContentPane().add(ufo, BorderLayout.CENTER); \/\/ Unser Ufo wird in die Mitte der ContentPane gesetzt\r\n\r\n    this.setVisible(true); \/\/ Fenster wird sichtbar gemacht\r\n  }\r\n\r\n  \/*\r\n   * Die Methode des KeyListeners wird hier \u00fcberschrieben in der Variable c wird\r\n   * der Code der gerade gedr\u00fcckten Taste gespeichert, in der switch..case\r\n   * Verzweigung entsprechend auf Methode des Objekts Raumschiff verwiesen\r\n   *\/\r\n  @Override\r\n  public void keyPressed(KeyEvent e) {\r\n    int c = e.getKeyCode();\r\n    switch (c) {\r\n    case 37:\r\n      ufo.nachLinks();\r\n      eingabefeld.setText(\"Links\");\r\n      break;\r\n    case 38:\r\n      ufo.nachOben();\r\n      eingabefeld.setText(\"Oben\");\r\n      break;\r\n    case 39:\r\n      ufo.nachRechts();\r\n      eingabefeld.setText(\"Rechts\");\r\n      break;\r\n    case 40:\r\n      ufo.nachUnten();\r\n      eingabefeld.setText(\"Unten\");\r\n      break;\r\n    }\r\n\r\n    System.out.println(\"Taste: \" + c);\r\n\r\n  }\r\n\r\n  @Override\r\n  public void keyReleased(KeyEvent e) {\r\n    \/\/ TODO Automatisch generierter Methodenstub\r\n\r\n  }\r\n\r\n  @Override\r\n  public void keyTyped(KeyEvent e) {\r\n    \/\/ TODO Automatisch generierter Methodenstub\r\n\r\n  }\r\n\r\n}\r\n\r\nclass Raumschiff extends JPanel {\r\n\r\n  int x; \/\/ Deklaration x-Koordinate\r\n  int y; \/\/ Deklaration y-Koordinate\r\n\r\n  public Raumschiff() {\r\n\r\n    this.x = 100; \/\/ x-Koordinate wird initialisiert\r\n    this.y = 100; \/\/ y-Koordinate wird initialisiert\r\n    this.setOpaque(false);\r\n\r\n  }\r\n\r\n  public void nachOben() {\r\n    this.y--; \/\/ y wird um 1 verringert, Kurzform von: this.y = this.y - 1\r\n    this.repaint(); \/\/ Raumschiff wird neu gezeichnet\r\n  }\r\n\r\n  public void nachUnten() {\r\n    this.y++; \/\/ y wird um 1 erh\u00f6ht\r\n    this.repaint();\r\n  }\r\n\r\n  public void nachLinks() {\r\n    this.x--; \/\/ x wird um 1 verringert\r\n    this.repaint();\r\n  }\r\n\r\n  public void nachRechts() {\r\n    this.x++; \/\/ x wird um 1 erh\u00f6ht\r\n    this.repaint();\r\n  }\r\n\r\n  \/*\r\n   * Die paint Methode beinhaltet die Grafik des JPanels. In diesem Falle stellt\r\n   * eine Ellipse unser Raumschiff dar\r\n   *\/\r\n  public void paint(Graphics g) {\r\n    super.paint(g); \/\/ paint(g) des Elternelements muss f\u00fcr korrekte Darstellung aufgerufen werden\r\n    g.setColor(Color.BLUE); \/\/ Farbe wird definiert\r\n    g.fillOval(this.x, this.y, 50, 20); \/\/ (x-Koordinate,y-koordinate, Breite, H\u00f6he)\r\n  }\r\n\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine Klasse ist die Beschreibung des Datentyps Objekt. Ein Objekt wird dazu verwendet Daten zu formen indem ihnen ein spezieller Zweck zugeordnet wird. Dies geschieht mithilfe von Methoden. Ein kleines Raumschiff in einem Computerspiel k\u00f6nnte z. B. die Daten f\u00fcr die Position auf dem Bildschirm haben, also die X und Y-Koordinaten. Und vier Methoden zum [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[6],"tags":[],"_links":{"self":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/608"}],"collection":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/comments?post=608"}],"version-history":[{"count":8,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/608\/revisions"}],"predecessor-version":[{"id":846,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/608\/revisions\/846"}],"wp:attachment":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/media?parent=608"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/categories?post=608"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/tags?post=608"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}