<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.byte-welt.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Theuserbl</id>
	<title>Byte-Welt Wiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.byte-welt.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Theuserbl"/>
	<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php/Spezial:Beitr%C3%A4ge/Theuserbl"/>
	<updated>2026-07-09T12:56:34Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Dokument_mit_Standardanwendung_%C3%B6ffnen_(Java)&amp;diff=5507</id>
		<title>Dokument mit Standardanwendung öffnen (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Dokument_mit_Standardanwendung_%C3%B6ffnen_(Java)&amp;diff=5507"/>
		<updated>2013-08-22T19:15:19Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: /* Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In diesem Kurz-Tutorial wird beschrieben, wie man in Java Dokumente und Dateien mit der dafür bestimmten (im System registrierten) Standardanwendung öffnen kann.&lt;br /&gt;
Im Beispiel ist &#039;&#039;&#039;MyFile.pdf&#039;&#039;&#039; der Dateiname.&lt;br /&gt;
&lt;br /&gt;
=Bis Java 1.5=&lt;br /&gt;
==Windows==&lt;br /&gt;
&amp;lt;pre&amp;gt;Runtime.getRuntime().exec(&amp;quot;rundll32 SHELL32.DLL,ShellExec_RunDLL MyFile.pdf&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Runtime.getRuntime().exec(&amp;quot;cmd /c start MyFile.pdf&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==MacOS X==&lt;br /&gt;
&amp;lt;pre&amp;gt;Runtime.getRuntime().exec(&amp;quot;open MyFile.pdf&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
&amp;lt;pre&amp;gt;Runtime.getRuntime().exec(&amp;quot;xdg-open MyFile.pdf&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ab Java 1.6=&lt;br /&gt;
Mit Java 1.6 wurde die Klasse Desktop eingeführt, die nun unter allen Betriebssystemen gleichen Code einsetzt, um Dateien mit der Standardanwendung zu öffnen.&lt;br /&gt;
&lt;br /&gt;
Beispiel fehlt noch...&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Dokument_mit_Standardanwendung_%C3%B6ffnen_(Java)&amp;diff=5505</id>
		<title>Dokument mit Standardanwendung öffnen (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Dokument_mit_Standardanwendung_%C3%B6ffnen_(Java)&amp;diff=5505"/>
		<updated>2013-08-22T19:05:20Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: Angeblich ist &amp;quot;Mein-Dokument.pdf&amp;quot; der Dateiname. Daher korrigiert.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In diesem Kurz-Tutorial wird beschrieben, wie man in Java Dokumente und Dateien mit der dafür bestimmten (im System registrierten) Standardanwendung öffnen kann.&lt;br /&gt;
Im Beispiel ist &#039;&#039;&#039;Mein-Dokument.pdf&#039;&#039;&#039; der Dateiname.&lt;br /&gt;
&lt;br /&gt;
=Bis Java 1.5=&lt;br /&gt;
==Windows==&lt;br /&gt;
&amp;lt;pre&amp;gt;Runtime.getRuntime().exec(&amp;quot;rundll32 SHELL32.DLL,ShellExec_RunDLL Mein-Dokument.pdf&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Runtime.getRuntime().exec(&amp;quot;cmd /c start Mein-Dokument.pdf&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==MacOS X==&lt;br /&gt;
&amp;lt;pre&amp;gt;Runtime.getRuntime().exec(&amp;quot;open Mein-Dokument.pdf&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
Fehlt noch...&lt;br /&gt;
&lt;br /&gt;
=Ab Java 1.6=&lt;br /&gt;
Mit Java 1.6 wurde die Klasse Desktop eingeführt, die nun unter allen Betriebssystemen gleichen Code einsetzt, um Dateien mit der Standardanwendung zu öffnen.&lt;br /&gt;
&lt;br /&gt;
Beispiel fehlt noch...&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Dokument_mit_Standardanwendung_%C3%B6ffnen_(Java)&amp;diff=5504</id>
		<title>Dokument mit Standardanwendung öffnen (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Dokument_mit_Standardanwendung_%C3%B6ffnen_(Java)&amp;diff=5504"/>
		<updated>2013-08-22T19:00:40Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: /* Windows */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In diesem Kurz-Tutorial wird beschrieben, wie man in Java Dokumente und Dateien mit der dafür bestimmten (im System registrierten) Standardanwendung öffnen kann.&lt;br /&gt;
Im Beispiel ist &#039;&#039;&#039;Mein-Dokument.pdf&#039;&#039;&#039; der Dateiname.&lt;br /&gt;
&lt;br /&gt;
=Bis Java 1.5=&lt;br /&gt;
==Windows==&lt;br /&gt;
&amp;lt;pre&amp;gt;Runtime.getRuntime().exec(&amp;quot;rundll32 SHELL32.DLL,ShellExec_RunDLL pdf_datei.pdf&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Runtime.getRuntime().exec(&amp;quot;cmd /c start pdf_datei.pdf&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==MacOS X==&lt;br /&gt;
&amp;lt;pre&amp;gt;Runtime.getRuntime().exec(&amp;quot;open pdf_datei.pdf&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
Fehlt noch...&lt;br /&gt;
&lt;br /&gt;
=Ab Java 1.6=&lt;br /&gt;
Mit Java 1.6 wurde die Klasse Desktop eingeführt, die nun unter allen Betriebssystemen gleichen Code einsetzt, um Dateien mit der Standardanwendung zu öffnen.&lt;br /&gt;
&lt;br /&gt;
Beispiel fehlt noch...&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Vererbung_(CSharp)&amp;diff=5462</id>
		<title>Vererbung (CSharp)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Vererbung_(CSharp)&amp;diff=5462"/>
		<updated>2013-08-21T22:50:32Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im folgenden wird in anschaulicher Weise die Vererbung in C#, welches ein Teilbereich der Objektorientierung ist, beschrieben.&lt;br /&gt;
Alle Programme sehen, wenn man sie ausführt, genau gleich aus und bedienen sich auch gleich. Auch wenn der Quellcode immer wieder etwas anders ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fangen wir mit einem einfachen kleinen Programm an, das ein Fenster öffnet und drei Buttons erstellt. Zwei davon sind rot:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=csharp&amp;gt;    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
        &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;/code=csharp&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=csharp&amp;gt;using System;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
 &lt;br /&gt;
public class MyProgram {&lt;br /&gt;
 &lt;br /&gt;
  public static void Main(string[] args) {&lt;br /&gt;
    Form f = new Form();&lt;br /&gt;
    f.Font = SystemFonts.MessageBoxFont;&lt;br /&gt;
    f.Text = &amp;quot;My Window&amp;quot;;&lt;br /&gt;
    FlowLayoutPanel p = new FlowLayoutPanel();&lt;br /&gt;
    Button b1 = new Button();&lt;br /&gt;
    Button b2 = new Button();&lt;br /&gt;
    Button b3 = new Button();&lt;br /&gt;
    b1.Text = &amp;quot;Button 1&amp;quot;;&lt;br /&gt;
    b2.Text = &amp;quot;Button 2&amp;quot;;&lt;br /&gt;
    b3.Text = &amp;quot;Button 3&amp;quot;;&lt;br /&gt;
    b1.BackColor = Color.FromArgb(255,0,0);&lt;br /&gt;
    b3.BackColor = Color.FromArgb(255,0,0);&lt;br /&gt;
    p.Controls.Add(b1);&lt;br /&gt;
    p.Controls.Add(b2);&lt;br /&gt;
    p.Controls.Add(b3);&lt;br /&gt;
    f.Controls.Add(p);&lt;br /&gt;
    p.Width = 300;&lt;br /&gt;
    p.Height = 100;&lt;br /&gt;
    f.Width = 350;&lt;br /&gt;
    f.Height = 150;&lt;br /&gt;
    Application.EnableVisualStyles();&lt;br /&gt;
    Application.Run(f);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&amp;lt;/code=csharp&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;new&amp;quot; wird ein neues Objekt (eine Instanz) erstellt, das eine Kopie des Hauptobjekts ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Betrachten wir uns nun &#039;&#039;Form&#039;&#039;. Man kann in C# eine neue Klasse erstellen (sofern die Klasse, von der sie sich ableitet, nicht &amp;quot;&#039;&#039;private&#039;&#039;&amp;quot; ist), die sämtliche Eigenschaften der Klasse, von der sie abgeleitet wurde, erbt.&lt;br /&gt;
&lt;br /&gt;
In folgendem Programm habe ich nun eine Klasse &#039;&#039;MyForm&#039;&#039; erstellt, die mittels &#039;&#039;:&#039;&#039; von der Klasse &#039;&#039;Form&#039;&#039; alle Eigenschaften erbt:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=csharp&amp;gt;using System.Windows.Forms;&lt;br /&gt;
&lt;br /&gt;
public class MyForm : Form {&lt;br /&gt;
  public MyForm() {&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;/code=csharp&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=csharp&amp;gt;using System;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
 &lt;br /&gt;
public class MyProgram {&lt;br /&gt;
 &lt;br /&gt;
  public static void Main(string[] args) {&lt;br /&gt;
    MyForm f = new MyForm();&lt;br /&gt;
    f.Font = SystemFonts.MessageBoxFont;&lt;br /&gt;
    f.Text = &amp;quot;My Window&amp;quot;;&lt;br /&gt;
    FlowLayoutPanel p = new FlowLayoutPanel();&lt;br /&gt;
    Button b1 = new Button();&lt;br /&gt;
    Button b2 = new Button();&lt;br /&gt;
    Button b3 = new Button();&lt;br /&gt;
    b1.Text = &amp;quot;Button 1&amp;quot;;&lt;br /&gt;
    b2.Text = &amp;quot;Button 2&amp;quot;;&lt;br /&gt;
    b3.Text = &amp;quot;Button 3&amp;quot;;&lt;br /&gt;
    b1.BackColor = Color.FromArgb(255,0,0);&lt;br /&gt;
    b3.BackColor = Color.FromArgb(255,0,0);&lt;br /&gt;
    p.Controls.Add(b1);&lt;br /&gt;
    p.Controls.Add(b2);&lt;br /&gt;
    p.Controls.Add(b3);&lt;br /&gt;
    f.Controls.Add(p);&lt;br /&gt;
    p.Width = 300;&lt;br /&gt;
    p.Height = 100;&lt;br /&gt;
    f.Width = 350;&lt;br /&gt;
    f.Height = 150;&lt;br /&gt;
    Application.EnableVisualStyles();&lt;br /&gt;
    Application.Run(f);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&amp;lt;/code=csharp&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Im Programm &#039;&#039;MyProgram&#039;&#039; wird nun &#039;&#039;MyForm&#039;&#039; auch genau so genutzt und behandelt wie zuvor &#039;&#039;Form&#039;&#039;. Und das Ergebnis ist ebenfalls gleich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(wird fortgesetzt...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
[http://de.wikipedia.org/wiki/Vererbung_%28Programmierung%29 &#039;&#039;Wikipedia: Vererbung in der Programmierung.&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:CSharp]]&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Vererbung_(CSharp)&amp;diff=5461</id>
		<title>Vererbung (CSharp)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Vererbung_(CSharp)&amp;diff=5461"/>
		<updated>2013-08-21T22:49:18Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: Die Seite wurde neu angelegt: „Im folgenden wird in anschaulicher Weise die Vererbung in C#, welches ein Teilbereich der Objektorientierung ist, beschrieben. Alle Programme sehen, wenn man sie …“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im folgenden wird in anschaulicher Weise die Vererbung in C#, welches ein Teilbereich der Objektorientierung ist, beschrieben.&lt;br /&gt;
Alle Programme sehen, wenn man sie ausführt, genau gleich aus und bedienen sich auch gleich. Auch wenn der Quellcode immer wieder etwas anders ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fangen wir mit einem einfachen kleinen Programm an, das ein Fenster öffnet und drei Buttons erstellt. Zwei davon sind rot:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=csharp&amp;gt;    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
        &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;/code=csharp&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;using System;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
 &lt;br /&gt;
public class MyProgram {&lt;br /&gt;
 &lt;br /&gt;
  public static void Main(string[] args) {&lt;br /&gt;
    Form f = new Form();&lt;br /&gt;
    f.Font = SystemFonts.MessageBoxFont;&lt;br /&gt;
    f.Text = &amp;quot;My Window&amp;quot;;&lt;br /&gt;
    FlowLayoutPanel p = new FlowLayoutPanel();&lt;br /&gt;
    Button b1 = new Button();&lt;br /&gt;
    Button b2 = new Button();&lt;br /&gt;
    Button b3 = new Button();&lt;br /&gt;
    b1.Text = &amp;quot;Button 1&amp;quot;;&lt;br /&gt;
    b2.Text = &amp;quot;Button 2&amp;quot;;&lt;br /&gt;
    b3.Text = &amp;quot;Button 3&amp;quot;;&lt;br /&gt;
    b1.BackColor = Color.FromArgb(255,0,0);&lt;br /&gt;
    b3.BackColor = Color.FromArgb(255,0,0);&lt;br /&gt;
    p.Controls.Add(b1);&lt;br /&gt;
    p.Controls.Add(b2);&lt;br /&gt;
    p.Controls.Add(b3);&lt;br /&gt;
    f.Controls.Add(p);&lt;br /&gt;
    p.Width = 300;&lt;br /&gt;
    p.Height = 100;&lt;br /&gt;
    f.Width = 350;&lt;br /&gt;
    f.Height = 150;&lt;br /&gt;
    Application.EnableVisualStyles();&lt;br /&gt;
    Application.Run(f);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;new&amp;quot; wird ein neues Objekt (eine Instanz) erstellt, das eine Kopie des Hauptobjekts ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Betrachten wir uns nun &#039;&#039;Form&#039;&#039;. Man kann in C# eine neue Klasse erstellen (sofern die Klasse, von der sie sich ableitet, nicht &amp;quot;&#039;&#039;private&#039;&#039;&amp;quot; ist), die sämtliche Eigenschaften der Klasse, von der sie abgeleitet wurde, erbt.&lt;br /&gt;
&lt;br /&gt;
In folgendem Programm habe ich nun eine Klasse &#039;&#039;MyForm&#039;&#039; erstellt, die mittels &#039;&#039;:&#039;&#039; von der Klasse &#039;&#039;Form&#039;&#039; alle Eigenschaften erbt:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=csharp&amp;gt;using System.Windows.Forms;&lt;br /&gt;
&lt;br /&gt;
public class MyForm : Form {&lt;br /&gt;
  public MyForm() {&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;/code=csharp&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=csharp&amp;gt;using System;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
 &lt;br /&gt;
public class MyProgram {&lt;br /&gt;
 &lt;br /&gt;
  public static void Main(string[] args) {&lt;br /&gt;
    MyForm f = new MyForm();&lt;br /&gt;
    f.Font = SystemFonts.MessageBoxFont;&lt;br /&gt;
    f.Text = &amp;quot;My Window&amp;quot;;&lt;br /&gt;
    FlowLayoutPanel p = new FlowLayoutPanel();&lt;br /&gt;
    Button b1 = new Button();&lt;br /&gt;
    Button b2 = new Button();&lt;br /&gt;
    Button b3 = new Button();&lt;br /&gt;
    b1.Text = &amp;quot;Button 1&amp;quot;;&lt;br /&gt;
    b2.Text = &amp;quot;Button 2&amp;quot;;&lt;br /&gt;
    b3.Text = &amp;quot;Button 3&amp;quot;;&lt;br /&gt;
    b1.BackColor = Color.FromArgb(255,0,0);&lt;br /&gt;
    b3.BackColor = Color.FromArgb(255,0,0);&lt;br /&gt;
    p.Controls.Add(b1);&lt;br /&gt;
    p.Controls.Add(b2);&lt;br /&gt;
    p.Controls.Add(b3);&lt;br /&gt;
    f.Controls.Add(p);&lt;br /&gt;
    p.Width = 300;&lt;br /&gt;
    p.Height = 100;&lt;br /&gt;
    f.Width = 350;&lt;br /&gt;
    f.Height = 150;&lt;br /&gt;
    Application.EnableVisualStyles();&lt;br /&gt;
    Application.Run(f);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&amp;lt;/code=csharp&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Im Programm &#039;&#039;MyProgram&#039;&#039; wird nun &#039;&#039;MyForm&#039;&#039; auch genau so genutzt und behandelt wie zuvor &#039;&#039;Form&#039;&#039;. Und das Ergebnis ist ebenfalls gleich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(wird fortgesetzt...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
[http://de.wikipedia.org/wiki/Vererbung_%28Programmierung%29 &#039;&#039;Wikipedia: Vererbung in der Programmierung.&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:CSharp]]&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Static_/_non-static_(Java)&amp;diff=5448</id>
		<title>Static / non-static (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Static_/_non-static_(Java)&amp;diff=5448"/>
		<updated>2013-08-19T10:08:58Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: /* Besonderheiten von statischen Methoden */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Der Unterschied zwischen statischen und nicht-statischen Methoden und Variablen  ==&lt;br /&gt;
&lt;br /&gt;
Das kleine Wort &#039;&#039;static&#039;&#039; macht einen großen Unterschied.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Statische Methoden ==&lt;br /&gt;
&lt;br /&gt;
Wer nicht-objektorientierte Sprachen wie C kennt, dem dürften statische Methoden vertraut sein. In nicht-objektorientiersten Sprachen heißen Methoden &amp;quot;Funktionen&amp;quot;. Und im Grunde genommen sind statische Methoden genau das: Funktionen wie in C.&lt;br /&gt;
&lt;br /&gt;
Wenn man von einer anderen Klasse auf statische Methoden oder Variablen zugreifen möchte, dann ruft man sie zusammen mit dem Klassennamen auf:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class ExternalClass {&lt;br /&gt;
&lt;br /&gt;
  public static int number=5;&lt;br /&gt;
  private static String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    ExternalClass.myStaticMethod();&lt;br /&gt;
    System.out.println( ExternalClass.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( ExternalClass.number );&lt;br /&gt;
    ExternalClass.number = 13;&lt;br /&gt;
    System.out.println( ExternalClass.number );&lt;br /&gt;
    ExternalClass.printText();&lt;br /&gt;
    ExternalClass.changeText();&lt;br /&gt;
    ExternalClass.printText();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Befinden sich die Methoden und Variablen in der eigenen Klasse, dann sieht es genauso aus:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int number=5;&lt;br /&gt;
  private static String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    System.out.println( MyProgram.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( MyProgram.number );&lt;br /&gt;
    MyProgram.number = 13;&lt;br /&gt;
    System.out.println( MyProgram.number );&lt;br /&gt;
    MyProgram.printText();&lt;br /&gt;
    MyProgram.changeText();&lt;br /&gt;
    MyProgram.printText();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Einsatzzweck für statische Methoden ist somit ähnlich wie bei Funktionen von nicht-objketorientierten Sprachen.&lt;br /&gt;
Statische Variablen sind ein zentraler Ort an dem etwas gespeichert wird.&lt;br /&gt;
&lt;br /&gt;
Beispiele für die Verwendung von statische Methoden im JRE:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    System.out.println( Math.PI );       // PI ist eine statische Variable in der Klasse Math&lt;br /&gt;
    System.out.println( Math.E );        // E ist eine statische Variable in der Klasse Math&lt;br /&gt;
    System.out.println( Math.sin(2) );   // sin() ist eine statische Methode in der Klasse Math&lt;br /&gt;
    System.out.println( Math.log(7) );   // log() ist eine statische Methode in der Klasse Math&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PI ist halt überall immer 3.141..., sin(2) ist überall 0.909..., etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nicht-Statische Methoden ==&lt;br /&gt;
&lt;br /&gt;
Nicht-Statische Methoden und Variablen kommen vor allem in objektorientierten Sprachen vor.&lt;br /&gt;
Um diese aufrufen zu können, muß erst mit &#039;&#039;new&#039;&#039; eine Instanz von der Klasse erstellt werden. Und an dieser kann man dann die Methoden aufrufen. Die Methoden gehören dann zur Instanz:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class ExternalClass {&lt;br /&gt;
&lt;br /&gt;
  public int number=5;&lt;br /&gt;
  private String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public ExternalClass() {&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;nicht-statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    ExternalClass ec1 = new ExternalClass();&lt;br /&gt;
    ec1.myNonStaticMethod();&lt;br /&gt;
    System.out.println( ec1.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( ec1.number );&lt;br /&gt;
    ec1.number = 13;&lt;br /&gt;
    System.out.println( ec1.number );&lt;br /&gt;
    ec1.printText();&lt;br /&gt;
    ec1.changeText();&lt;br /&gt;
    ec1.printText();&lt;br /&gt;
&lt;br /&gt;
    ExternalClass ec2 = new ExternalClass();&lt;br /&gt;
    ec2.printText();&lt;br /&gt;
    ec1.printText();&lt;br /&gt;
&lt;br /&gt;
    ec2.number = 29;&lt;br /&gt;
    System.out.println( ec1.number );&lt;br /&gt;
    System.out.println( ec2.number );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zwar existieren nun genau die gleichen Methoden und Variablen wie bei dem Beispiel mit den statischen Methoden, jedoch existieren sie für jede Instanz unabhängig voneinander.&lt;br /&gt;
&lt;br /&gt;
Befinden sich die Methoden und Variablen in der eigenen Klasse, dann sieht es ähnlich aus. In der eigenen Klasse wird jedoch statt einem Instanznamen das Schlüsselwort &#039;&#039;this&#039;&#039; verwendet:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public int number=5;&lt;br /&gt;
  private String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
    this.myNonStaticMethod();&lt;br /&gt;
    System.out.println( this.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( this.number );&lt;br /&gt;
    this.number = 13;&lt;br /&gt;
    System.out.println( this.number );&lt;br /&gt;
    this.printText();&lt;br /&gt;
    this.changeText();&lt;br /&gt;
    this.printText();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;nicht-statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyProgram p = new MyProgram();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für mehr Informationen zur vorgenommenen Umformung bitte auf [[Vererbung_(Java)]] nachlesen.&lt;br /&gt;
&lt;br /&gt;
Beispiele für die Verwendung von nicht-statische Methoden im JRE:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;MyProgram&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    JLabel l1 = new JLabel(&amp;quot;Label 1&amp;quot;);&lt;br /&gt;
    JTextArea ta = new JTextArea();&lt;br /&gt;
    &lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    p.add(l1);&lt;br /&gt;
    p.add(ta);&lt;br /&gt;
    &lt;br /&gt;
    ta.setPreferredSize(new Dimension(100,50));  // setPreferredSize ist eine nicht-statische&lt;br /&gt;
                                                 // Methode der Klasse JTextArea, von dem ta eine&lt;br /&gt;
                                                 // Instanz ist&lt;br /&gt;
    ta.setBorder(new LineBorder(Color.blue));&lt;br /&gt;
    ta.setText( b2.getText() );                  // Hier wird die Methode getText() von der&lt;br /&gt;
                                                 // Instanz b2 verwendet und ta mit setText()&lt;br /&gt;
                                                 // zugewiesen&lt;br /&gt;
    &lt;br /&gt;
    b1.setPreferredSize(new Dimension(180, 70)); // Die Groesse des Buttons von b1 wird mit&lt;br /&gt;
                                                 // der Methode setPreferredSize(), die in JButton&lt;br /&gt;
                                                 // definiert wurde, veraendert&lt;br /&gt;
    b3.setPreferredSize(new Dimension(160, 90)); // Andere Instanzen von Buttons bleiben davon&lt;br /&gt;
                                                 // unberührt und koennen ebenfalls mit der gleichen&lt;br /&gt;
                                                 // Methode eine andere Groesse erhaltem&lt;br /&gt;
    &lt;br /&gt;
    b1.setBackground(Color.red);                 // Auch hier wieder:&lt;br /&gt;
    b3.setBackground(Color.green);               // zwei verschiedene Buttons, die mit Hilfe der&lt;br /&gt;
                                                 // gleichen Methode setBackground() eine andere&lt;br /&gt;
                                                 // Hintergrundfarbe erhalten.&lt;br /&gt;
    &lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Verwirrungen um static / non-static ==&lt;br /&gt;
&lt;br /&gt;
So unterschiedlich statische und nicht-statische Methoden sind, so kommt es doch bei Anfängern zu Verwirrungen, da es manchmal so aussieht, als täten beide genau das Selbe:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int myStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public int myNonStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    myStaticVar *= 7;    // ist das gleiche wie&lt;br /&gt;
                         // myStaticVar = myStaticVar * 7;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    myNonStaticVar *= 13;  // ist das gleiche wie&lt;br /&gt;
                           // myNonStaticVar = myNonStaticVar * 13;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
    myStaticVar = 6;&lt;br /&gt;
    myNonStaticVar = 5;&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(myStaticVar);&lt;br /&gt;
    System.out.println(myNonStaticVar);&lt;br /&gt;
    &lt;br /&gt;
    myStaticMethod();&lt;br /&gt;
    myNonStaticMethod();&lt;br /&gt;
&lt;br /&gt;
    System.out.println(myStaticVar);&lt;br /&gt;
    System.out.println(myNonStaticVar);&lt;br /&gt;
&lt;br /&gt;
    myStaticMethod();&lt;br /&gt;
    myNonStaticMethod();&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(myStaticVar);&lt;br /&gt;
    System.out.println(myNonStaticVar);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new MyProgram();  // aehnlich wie&lt;br /&gt;
                      // MyProgram mp = new MyProgram();&lt;br /&gt;
                      // bloß, dass in diesem Fall nur der Konstruktor aufgerufen&lt;br /&gt;
                      // wird. Jedoch nicht eine Instanz zur weiteren verwendung in&lt;br /&gt;
                      // main() erhalten bleibt.&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Augenscheinlich gibt es zwischen der statischen Methode und Variable und der nicht-statischen Methode und Variable keinen Unterschied.&lt;br /&gt;
&lt;br /&gt;
Das liegt aber daran, weil man bei statischen Methoden den Klassennamen der Einfachheit halber weglassen kann und bei nicht-statischen Methoden das &#039;&#039;this&#039;&#039;.&lt;br /&gt;
Ausgeschrieben sieht das Programm folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int myStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public int myNonStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    myStaticVar *= 7;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    myNonStaticVar *= 13;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
    MyProgram.myStaticVar = 6;&lt;br /&gt;
    this.myNonStaticVar = 5;&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(MyProgram.myStaticVar);&lt;br /&gt;
    System.out.println(this.myNonStaticVar);&lt;br /&gt;
    &lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    this.myNonStaticMethod();&lt;br /&gt;
&lt;br /&gt;
    System.out.println(MyProgram.myStaticVar);&lt;br /&gt;
    System.out.println(this.myNonStaticVar);&lt;br /&gt;
&lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    this.myNonStaticMethod();&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(MyProgram.myStaticVar);&lt;br /&gt;
    System.out.println(this.myNonStaticVar);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new MyProgram();&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Noch deutlicher wird der Unterschied, wenn man von außen auf die Instanz zugreift:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int myStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public int myNonStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    myStaticVar *= 7;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    myNonStaticVar *= 13;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyProgram mp1 = new MyProgram();&lt;br /&gt;
    MyProgram mp2 = new MyProgram();&lt;br /&gt;
 &lt;br /&gt;
    MyProgram.myStaticVar = 6;&lt;br /&gt;
    mp1.myNonStaticVar = 5;&lt;br /&gt;
    mp2.myNonStaticVar = 8;&lt;br /&gt;
    &lt;br /&gt;
    System.out.println( MyProgram.myStaticVar );&lt;br /&gt;
    System.out.println( mp1.myNonStaticVar );&lt;br /&gt;
    System.out.println( mp2.myNonStaticVar );&lt;br /&gt;
    &lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    mp1.myNonStaticMethod();&lt;br /&gt;
 &lt;br /&gt;
    System.out.println( MyProgram.myStaticVar );&lt;br /&gt;
    System.out.println( mp1.myNonStaticVar );&lt;br /&gt;
    System.out.println( mp2.myNonStaticVar );&lt;br /&gt;
    &lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
&lt;br /&gt;
    System.out.println( MyProgram.myStaticVar );&lt;br /&gt;
    System.out.println( mp1.myNonStaticVar );&lt;br /&gt;
    System.out.println( mp2.myNonStaticVar );&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sieht man noch mal, daß statische Methoden und Variablen für alle Instanzen und auch statische Methoden wie main() gelten, während nicht-statische Methoden nur für eine bestimmte Instanz ihre Gültigkeit haben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Besonderheiten von statischen Methoden ==&lt;br /&gt;
&lt;br /&gt;
Am Anfang haben wir statische Methoden als äquivalent zu Funktionen in C und anderen nicht-objektorientierten Sprachen kennengelernt.&lt;br /&gt;
Um den Unterschied zwischen statischen und nicht-statischen Methoden zu verstehen, ist es auch für den Anfang ganz sinnvoll es so zu erklären.&lt;br /&gt;
Aber in der objektorientierten Sprache Java, gibt es dann doch einige Zusätze, die es in C z.B. nicht gibt.&lt;br /&gt;
&lt;br /&gt;
Statische Methoden lassen sich genauso wie nicht-statische Methoden ableiten:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class BaseClass {&lt;br /&gt;
&lt;br /&gt;
  public static void printFirstText() {&lt;br /&gt;
    System.out.println(&amp;quot;Dieses ist ein Text in BaseClass&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public static void printSecondText() {&lt;br /&gt;
    System.out.println(&amp;quot;Und noch ein Text in BaseClass&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=java&amp;gt;public class ExternalClass extends BaseClass{&lt;br /&gt;
&lt;br /&gt;
  public static void printSecondText() {&lt;br /&gt;
    System.out.println(&amp;quot;Ein Text in ExternalClass&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
     BaseClass.printFirstText();       // normaler Aufruf&lt;br /&gt;
     BaseClass.printSecondText();      // normaler Aufruf    &lt;br /&gt;
     ExternalClass.printFirstText();   // Methode ist von BaseClass abgeleitet&lt;br /&gt;
     ExternalClass.printSecondText();  // Methode, die die von BaseClass&lt;br /&gt;
                                       // ueberschrieben hat&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es gibt etwas ähnliches wie einen Konstruktor für statische Methoden:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class ExternalClass {&lt;br /&gt;
&lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;die statische Methode wurde aufgerufen.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public static void myOtherStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;eine weitere Methode wurde aufgerufen.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  static {&lt;br /&gt;
    System.out.println(&amp;quot;Es wurde zum erstem Mal statisch auf diese Klasse zugegriffen.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
     System.out.println(&lt;br /&gt;
       &amp;quot;Noch ist kein Zugriff auf ExternalCLass erfolgt.&amp;quot;);&lt;br /&gt;
     ExternalClass.myStaticMethod();&lt;br /&gt;
     ExternalClass.myOtherStaticMethod();&lt;br /&gt;
     ExternalClass.myStaticMethod();&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Diese Möglichkeit wird insbesondere eingesetzt, wenn man statischen Variablen direkt am Anfang bestimmte Werte zuweisen möchte.&lt;br /&gt;
So kann es sein, daß der Anfangswert der Variablen erst berechnet werden muß. Oder es handelt sich um eine Liste, die sich nur mit Hilfe einer [[Schleife]] befüllen lässt.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Static_/_non-static_(Java)&amp;diff=5447</id>
		<title>Static / non-static (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Static_/_non-static_(Java)&amp;diff=5447"/>
		<updated>2013-08-19T09:58:20Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: /* Besonderheiten von statischen Methoden */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Der Unterschied zwischen statischen und nicht-statischen Methoden und Variablen  ==&lt;br /&gt;
&lt;br /&gt;
Das kleine Wort &#039;&#039;static&#039;&#039; macht einen großen Unterschied.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Statische Methoden ==&lt;br /&gt;
&lt;br /&gt;
Wer nicht-objektorientierte Sprachen wie C kennt, dem dürften statische Methoden vertraut sein. In nicht-objektorientiersten Sprachen heißen Methoden &amp;quot;Funktionen&amp;quot;. Und im Grunde genommen sind statische Methoden genau das: Funktionen wie in C.&lt;br /&gt;
&lt;br /&gt;
Wenn man von einer anderen Klasse auf statische Methoden oder Variablen zugreifen möchte, dann ruft man sie zusammen mit dem Klassennamen auf:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class ExternalClass {&lt;br /&gt;
&lt;br /&gt;
  public static int number=5;&lt;br /&gt;
  private static String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    ExternalClass.myStaticMethod();&lt;br /&gt;
    System.out.println( ExternalClass.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( ExternalClass.number );&lt;br /&gt;
    ExternalClass.number = 13;&lt;br /&gt;
    System.out.println( ExternalClass.number );&lt;br /&gt;
    ExternalClass.printText();&lt;br /&gt;
    ExternalClass.changeText();&lt;br /&gt;
    ExternalClass.printText();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Befinden sich die Methoden und Variablen in der eigenen Klasse, dann sieht es genauso aus:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int number=5;&lt;br /&gt;
  private static String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    System.out.println( MyProgram.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( MyProgram.number );&lt;br /&gt;
    MyProgram.number = 13;&lt;br /&gt;
    System.out.println( MyProgram.number );&lt;br /&gt;
    MyProgram.printText();&lt;br /&gt;
    MyProgram.changeText();&lt;br /&gt;
    MyProgram.printText();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Einsatzzweck für statische Methoden ist somit ähnlich wie bei Funktionen von nicht-objketorientierten Sprachen.&lt;br /&gt;
Statische Variablen sind ein zentraler Ort an dem etwas gespeichert wird.&lt;br /&gt;
&lt;br /&gt;
Beispiele für die Verwendung von statische Methoden im JRE:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    System.out.println( Math.PI );       // PI ist eine statische Variable in der Klasse Math&lt;br /&gt;
    System.out.println( Math.E );        // E ist eine statische Variable in der Klasse Math&lt;br /&gt;
    System.out.println( Math.sin(2) );   // sin() ist eine statische Methode in der Klasse Math&lt;br /&gt;
    System.out.println( Math.log(7) );   // log() ist eine statische Methode in der Klasse Math&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PI ist halt überall immer 3.141..., sin(2) ist überall 0.909..., etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nicht-Statische Methoden ==&lt;br /&gt;
&lt;br /&gt;
Nicht-Statische Methoden und Variablen kommen vor allem in objektorientierten Sprachen vor.&lt;br /&gt;
Um diese aufrufen zu können, muß erst mit &#039;&#039;new&#039;&#039; eine Instanz von der Klasse erstellt werden. Und an dieser kann man dann die Methoden aufrufen. Die Methoden gehören dann zur Instanz:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class ExternalClass {&lt;br /&gt;
&lt;br /&gt;
  public int number=5;&lt;br /&gt;
  private String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public ExternalClass() {&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;nicht-statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    ExternalClass ec1 = new ExternalClass();&lt;br /&gt;
    ec1.myNonStaticMethod();&lt;br /&gt;
    System.out.println( ec1.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( ec1.number );&lt;br /&gt;
    ec1.number = 13;&lt;br /&gt;
    System.out.println( ec1.number );&lt;br /&gt;
    ec1.printText();&lt;br /&gt;
    ec1.changeText();&lt;br /&gt;
    ec1.printText();&lt;br /&gt;
&lt;br /&gt;
    ExternalClass ec2 = new ExternalClass();&lt;br /&gt;
    ec2.printText();&lt;br /&gt;
    ec1.printText();&lt;br /&gt;
&lt;br /&gt;
    ec2.number = 29;&lt;br /&gt;
    System.out.println( ec1.number );&lt;br /&gt;
    System.out.println( ec2.number );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zwar existieren nun genau die gleichen Methoden und Variablen wie bei dem Beispiel mit den statischen Methoden, jedoch existieren sie für jede Instanz unabhängig voneinander.&lt;br /&gt;
&lt;br /&gt;
Befinden sich die Methoden und Variablen in der eigenen Klasse, dann sieht es ähnlich aus. In der eigenen Klasse wird jedoch statt einem Instanznamen das Schlüsselwort &#039;&#039;this&#039;&#039; verwendet:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public int number=5;&lt;br /&gt;
  private String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
    this.myNonStaticMethod();&lt;br /&gt;
    System.out.println( this.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( this.number );&lt;br /&gt;
    this.number = 13;&lt;br /&gt;
    System.out.println( this.number );&lt;br /&gt;
    this.printText();&lt;br /&gt;
    this.changeText();&lt;br /&gt;
    this.printText();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;nicht-statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyProgram p = new MyProgram();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für mehr Informationen zur vorgenommenen Umformung bitte auf [[Vererbung_(Java)]] nachlesen.&lt;br /&gt;
&lt;br /&gt;
Beispiele für die Verwendung von nicht-statische Methoden im JRE:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;MyProgram&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    JLabel l1 = new JLabel(&amp;quot;Label 1&amp;quot;);&lt;br /&gt;
    JTextArea ta = new JTextArea();&lt;br /&gt;
    &lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    p.add(l1);&lt;br /&gt;
    p.add(ta);&lt;br /&gt;
    &lt;br /&gt;
    ta.setPreferredSize(new Dimension(100,50));  // setPreferredSize ist eine nicht-statische&lt;br /&gt;
                                                 // Methode der Klasse JTextArea, von dem ta eine&lt;br /&gt;
                                                 // Instanz ist&lt;br /&gt;
    ta.setBorder(new LineBorder(Color.blue));&lt;br /&gt;
    ta.setText( b2.getText() );                  // Hier wird die Methode getText() von der&lt;br /&gt;
                                                 // Instanz b2 verwendet und ta mit setText()&lt;br /&gt;
                                                 // zugewiesen&lt;br /&gt;
    &lt;br /&gt;
    b1.setPreferredSize(new Dimension(180, 70)); // Die Groesse des Buttons von b1 wird mit&lt;br /&gt;
                                                 // der Methode setPreferredSize(), die in JButton&lt;br /&gt;
                                                 // definiert wurde, veraendert&lt;br /&gt;
    b3.setPreferredSize(new Dimension(160, 90)); // Andere Instanzen von Buttons bleiben davon&lt;br /&gt;
                                                 // unberührt und koennen ebenfalls mit der gleichen&lt;br /&gt;
                                                 // Methode eine andere Groesse erhaltem&lt;br /&gt;
    &lt;br /&gt;
    b1.setBackground(Color.red);                 // Auch hier wieder:&lt;br /&gt;
    b3.setBackground(Color.green);               // zwei verschiedene Buttons, die mit Hilfe der&lt;br /&gt;
                                                 // gleichen Methode setBackground() eine andere&lt;br /&gt;
                                                 // Hintergrundfarbe erhalten.&lt;br /&gt;
    &lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Verwirrungen um static / non-static ==&lt;br /&gt;
&lt;br /&gt;
So unterschiedlich statische und nicht-statische Methoden sind, so kommt es doch bei Anfängern zu Verwirrungen, da es manchmal so aussieht, als täten beide genau das Selbe:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int myStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public int myNonStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    myStaticVar *= 7;    // ist das gleiche wie&lt;br /&gt;
                         // myStaticVar = myStaticVar * 7;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    myNonStaticVar *= 13;  // ist das gleiche wie&lt;br /&gt;
                           // myNonStaticVar = myNonStaticVar * 13;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
    myStaticVar = 6;&lt;br /&gt;
    myNonStaticVar = 5;&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(myStaticVar);&lt;br /&gt;
    System.out.println(myNonStaticVar);&lt;br /&gt;
    &lt;br /&gt;
    myStaticMethod();&lt;br /&gt;
    myNonStaticMethod();&lt;br /&gt;
&lt;br /&gt;
    System.out.println(myStaticVar);&lt;br /&gt;
    System.out.println(myNonStaticVar);&lt;br /&gt;
&lt;br /&gt;
    myStaticMethod();&lt;br /&gt;
    myNonStaticMethod();&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(myStaticVar);&lt;br /&gt;
    System.out.println(myNonStaticVar);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new MyProgram();  // aehnlich wie&lt;br /&gt;
                      // MyProgram mp = new MyProgram();&lt;br /&gt;
                      // bloß, dass in diesem Fall nur der Konstruktor aufgerufen&lt;br /&gt;
                      // wird. Jedoch nicht eine Instanz zur weiteren verwendung in&lt;br /&gt;
                      // main() erhalten bleibt.&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Augenscheinlich gibt es zwischen der statischen Methode und Variable und der nicht-statischen Methode und Variable keinen Unterschied.&lt;br /&gt;
&lt;br /&gt;
Das liegt aber daran, weil man bei statischen Methoden den Klassennamen der Einfachheit halber weglassen kann und bei nicht-statischen Methoden das &#039;&#039;this&#039;&#039;.&lt;br /&gt;
Ausgeschrieben sieht das Programm folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int myStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public int myNonStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    myStaticVar *= 7;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    myNonStaticVar *= 13;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
    MyProgram.myStaticVar = 6;&lt;br /&gt;
    this.myNonStaticVar = 5;&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(MyProgram.myStaticVar);&lt;br /&gt;
    System.out.println(this.myNonStaticVar);&lt;br /&gt;
    &lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    this.myNonStaticMethod();&lt;br /&gt;
&lt;br /&gt;
    System.out.println(MyProgram.myStaticVar);&lt;br /&gt;
    System.out.println(this.myNonStaticVar);&lt;br /&gt;
&lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    this.myNonStaticMethod();&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(MyProgram.myStaticVar);&lt;br /&gt;
    System.out.println(this.myNonStaticVar);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new MyProgram();&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Noch deutlicher wird der Unterschied, wenn man von außen auf die Instanz zugreift:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int myStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public int myNonStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    myStaticVar *= 7;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    myNonStaticVar *= 13;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyProgram mp1 = new MyProgram();&lt;br /&gt;
    MyProgram mp2 = new MyProgram();&lt;br /&gt;
 &lt;br /&gt;
    MyProgram.myStaticVar = 6;&lt;br /&gt;
    mp1.myNonStaticVar = 5;&lt;br /&gt;
    mp2.myNonStaticVar = 8;&lt;br /&gt;
    &lt;br /&gt;
    System.out.println( MyProgram.myStaticVar );&lt;br /&gt;
    System.out.println( mp1.myNonStaticVar );&lt;br /&gt;
    System.out.println( mp2.myNonStaticVar );&lt;br /&gt;
    &lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    mp1.myNonStaticMethod();&lt;br /&gt;
 &lt;br /&gt;
    System.out.println( MyProgram.myStaticVar );&lt;br /&gt;
    System.out.println( mp1.myNonStaticVar );&lt;br /&gt;
    System.out.println( mp2.myNonStaticVar );&lt;br /&gt;
    &lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
&lt;br /&gt;
    System.out.println( MyProgram.myStaticVar );&lt;br /&gt;
    System.out.println( mp1.myNonStaticVar );&lt;br /&gt;
    System.out.println( mp2.myNonStaticVar );&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sieht man noch mal, daß statische Methoden und Variablen für alle Instanzen und auch statische Methoden wie main() gelten, während nicht-statische Methoden nur für eine bestimmte Instanz ihre Gültigkeit haben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Besonderheiten von statischen Methoden ==&lt;br /&gt;
&lt;br /&gt;
Am Anfang haben wir statische Methoden als äquivalent zu Funktionen in C und anderen nicht-objektorientierten Sprachen kennengelernt.&lt;br /&gt;
Um den Unterschied zwischen statischen und nicht-statischen Methoden zu verstehen, ist es auch für den Anfang ganz sinnvoll es so zu erklären.&lt;br /&gt;
Aber in der objektorientierten Sprache Java, gibt es dann doch einige Zusätze, die es in C z.B. nicht gibt.&lt;br /&gt;
&lt;br /&gt;
Statische Methoden lassen sich genauso wie nicht-statische Methoden ableiten:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class BaseClass {&lt;br /&gt;
&lt;br /&gt;
  public static void printFirstText() {&lt;br /&gt;
    System.out.println(&amp;quot;Dieses ist ein Text in BaseClass&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public static void printSecondText() {&lt;br /&gt;
    System.out.println(&amp;quot;Und noch ein Text in BaseClass&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=java&amp;gt;public class ExternalClass extends BaseClass{&lt;br /&gt;
&lt;br /&gt;
  public static void printSecondText() {&lt;br /&gt;
    System.out.println(&amp;quot;Ein Text in ExternalClass&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
     BaseClass.printFirstText();       // normaler Aufruf&lt;br /&gt;
     BaseClass.printSecondText();      // normaler Aufruf    &lt;br /&gt;
     ExternalClass.printFirstText();   // Methode ist von BaseClass abgeleitet&lt;br /&gt;
     ExternalClass.printSecondText();  // Methode, die die von BaseClass&lt;br /&gt;
                                       // ueberschrieben hat&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es gibt etwas ähnliches wie einen Konstruktor für statische Methoden:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class ExternalClass {&lt;br /&gt;
&lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;die statische Methode wurde aufgerufen.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public static void myOtherStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;eine weitere Methode wurde aufgerufen.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  static {&lt;br /&gt;
    System.out.println(&amp;quot;Es wurde zum erstem Mal statisch auf diese Klasse zugegriffen.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
     ExternalClass.myStaticMethod();&lt;br /&gt;
     ExternalClass.myOtherStaticMethod();&lt;br /&gt;
     ExternalClass.myStaticMethod();&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Diese Möglichkeit wird insbesondere eingesetzt, wenn man statischen Variablen direkt am Anfang bestimmte Werte zuweisen möchte.&lt;br /&gt;
So kann es sein, daß der Anfangswert der Variablen erst berechnet werden muß. Oder es handelt sich um eine Liste, die sich nur mit Hilfe einer [[Schleife]] befüllen lässt.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Static_/_non-static_(Java)&amp;diff=5446</id>
		<title>Static / non-static (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Static_/_non-static_(Java)&amp;diff=5446"/>
		<updated>2013-08-19T09:51:20Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Der Unterschied zwischen statischen und nicht-statischen Methoden und Variablen  ==&lt;br /&gt;
&lt;br /&gt;
Das kleine Wort &#039;&#039;static&#039;&#039; macht einen großen Unterschied.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Statische Methoden ==&lt;br /&gt;
&lt;br /&gt;
Wer nicht-objektorientierte Sprachen wie C kennt, dem dürften statische Methoden vertraut sein. In nicht-objektorientiersten Sprachen heißen Methoden &amp;quot;Funktionen&amp;quot;. Und im Grunde genommen sind statische Methoden genau das: Funktionen wie in C.&lt;br /&gt;
&lt;br /&gt;
Wenn man von einer anderen Klasse auf statische Methoden oder Variablen zugreifen möchte, dann ruft man sie zusammen mit dem Klassennamen auf:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class ExternalClass {&lt;br /&gt;
&lt;br /&gt;
  public static int number=5;&lt;br /&gt;
  private static String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    ExternalClass.myStaticMethod();&lt;br /&gt;
    System.out.println( ExternalClass.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( ExternalClass.number );&lt;br /&gt;
    ExternalClass.number = 13;&lt;br /&gt;
    System.out.println( ExternalClass.number );&lt;br /&gt;
    ExternalClass.printText();&lt;br /&gt;
    ExternalClass.changeText();&lt;br /&gt;
    ExternalClass.printText();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Befinden sich die Methoden und Variablen in der eigenen Klasse, dann sieht es genauso aus:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int number=5;&lt;br /&gt;
  private static String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    System.out.println( MyProgram.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( MyProgram.number );&lt;br /&gt;
    MyProgram.number = 13;&lt;br /&gt;
    System.out.println( MyProgram.number );&lt;br /&gt;
    MyProgram.printText();&lt;br /&gt;
    MyProgram.changeText();&lt;br /&gt;
    MyProgram.printText();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Einsatzzweck für statische Methoden ist somit ähnlich wie bei Funktionen von nicht-objketorientierten Sprachen.&lt;br /&gt;
Statische Variablen sind ein zentraler Ort an dem etwas gespeichert wird.&lt;br /&gt;
&lt;br /&gt;
Beispiele für die Verwendung von statische Methoden im JRE:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    System.out.println( Math.PI );       // PI ist eine statische Variable in der Klasse Math&lt;br /&gt;
    System.out.println( Math.E );        // E ist eine statische Variable in der Klasse Math&lt;br /&gt;
    System.out.println( Math.sin(2) );   // sin() ist eine statische Methode in der Klasse Math&lt;br /&gt;
    System.out.println( Math.log(7) );   // log() ist eine statische Methode in der Klasse Math&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PI ist halt überall immer 3.141..., sin(2) ist überall 0.909..., etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nicht-Statische Methoden ==&lt;br /&gt;
&lt;br /&gt;
Nicht-Statische Methoden und Variablen kommen vor allem in objektorientierten Sprachen vor.&lt;br /&gt;
Um diese aufrufen zu können, muß erst mit &#039;&#039;new&#039;&#039; eine Instanz von der Klasse erstellt werden. Und an dieser kann man dann die Methoden aufrufen. Die Methoden gehören dann zur Instanz:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class ExternalClass {&lt;br /&gt;
&lt;br /&gt;
  public int number=5;&lt;br /&gt;
  private String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public ExternalClass() {&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;nicht-statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    ExternalClass ec1 = new ExternalClass();&lt;br /&gt;
    ec1.myNonStaticMethod();&lt;br /&gt;
    System.out.println( ec1.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( ec1.number );&lt;br /&gt;
    ec1.number = 13;&lt;br /&gt;
    System.out.println( ec1.number );&lt;br /&gt;
    ec1.printText();&lt;br /&gt;
    ec1.changeText();&lt;br /&gt;
    ec1.printText();&lt;br /&gt;
&lt;br /&gt;
    ExternalClass ec2 = new ExternalClass();&lt;br /&gt;
    ec2.printText();&lt;br /&gt;
    ec1.printText();&lt;br /&gt;
&lt;br /&gt;
    ec2.number = 29;&lt;br /&gt;
    System.out.println( ec1.number );&lt;br /&gt;
    System.out.println( ec2.number );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zwar existieren nun genau die gleichen Methoden und Variablen wie bei dem Beispiel mit den statischen Methoden, jedoch existieren sie für jede Instanz unabhängig voneinander.&lt;br /&gt;
&lt;br /&gt;
Befinden sich die Methoden und Variablen in der eigenen Klasse, dann sieht es ähnlich aus. In der eigenen Klasse wird jedoch statt einem Instanznamen das Schlüsselwort &#039;&#039;this&#039;&#039; verwendet:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public int number=5;&lt;br /&gt;
  private String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
    this.myNonStaticMethod();&lt;br /&gt;
    System.out.println( this.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( this.number );&lt;br /&gt;
    this.number = 13;&lt;br /&gt;
    System.out.println( this.number );&lt;br /&gt;
    this.printText();&lt;br /&gt;
    this.changeText();&lt;br /&gt;
    this.printText();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;nicht-statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyProgram p = new MyProgram();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für mehr Informationen zur vorgenommenen Umformung bitte auf [[Vererbung_(Java)]] nachlesen.&lt;br /&gt;
&lt;br /&gt;
Beispiele für die Verwendung von nicht-statische Methoden im JRE:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;MyProgram&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    JLabel l1 = new JLabel(&amp;quot;Label 1&amp;quot;);&lt;br /&gt;
    JTextArea ta = new JTextArea();&lt;br /&gt;
    &lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    p.add(l1);&lt;br /&gt;
    p.add(ta);&lt;br /&gt;
    &lt;br /&gt;
    ta.setPreferredSize(new Dimension(100,50));  // setPreferredSize ist eine nicht-statische&lt;br /&gt;
                                                 // Methode der Klasse JTextArea, von dem ta eine&lt;br /&gt;
                                                 // Instanz ist&lt;br /&gt;
    ta.setBorder(new LineBorder(Color.blue));&lt;br /&gt;
    ta.setText( b2.getText() );                  // Hier wird die Methode getText() von der&lt;br /&gt;
                                                 // Instanz b2 verwendet und ta mit setText()&lt;br /&gt;
                                                 // zugewiesen&lt;br /&gt;
    &lt;br /&gt;
    b1.setPreferredSize(new Dimension(180, 70)); // Die Groesse des Buttons von b1 wird mit&lt;br /&gt;
                                                 // der Methode setPreferredSize(), die in JButton&lt;br /&gt;
                                                 // definiert wurde, veraendert&lt;br /&gt;
    b3.setPreferredSize(new Dimension(160, 90)); // Andere Instanzen von Buttons bleiben davon&lt;br /&gt;
                                                 // unberührt und koennen ebenfalls mit der gleichen&lt;br /&gt;
                                                 // Methode eine andere Groesse erhaltem&lt;br /&gt;
    &lt;br /&gt;
    b1.setBackground(Color.red);                 // Auch hier wieder:&lt;br /&gt;
    b3.setBackground(Color.green);               // zwei verschiedene Buttons, die mit Hilfe der&lt;br /&gt;
                                                 // gleichen Methode setBackground() eine andere&lt;br /&gt;
                                                 // Hintergrundfarbe erhalten.&lt;br /&gt;
    &lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Verwirrungen um static / non-static ==&lt;br /&gt;
&lt;br /&gt;
So unterschiedlich statische und nicht-statische Methoden sind, so kommt es doch bei Anfängern zu Verwirrungen, da es manchmal so aussieht, als täten beide genau das Selbe:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int myStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public int myNonStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    myStaticVar *= 7;    // ist das gleiche wie&lt;br /&gt;
                         // myStaticVar = myStaticVar * 7;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    myNonStaticVar *= 13;  // ist das gleiche wie&lt;br /&gt;
                           // myNonStaticVar = myNonStaticVar * 13;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
    myStaticVar = 6;&lt;br /&gt;
    myNonStaticVar = 5;&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(myStaticVar);&lt;br /&gt;
    System.out.println(myNonStaticVar);&lt;br /&gt;
    &lt;br /&gt;
    myStaticMethod();&lt;br /&gt;
    myNonStaticMethod();&lt;br /&gt;
&lt;br /&gt;
    System.out.println(myStaticVar);&lt;br /&gt;
    System.out.println(myNonStaticVar);&lt;br /&gt;
&lt;br /&gt;
    myStaticMethod();&lt;br /&gt;
    myNonStaticMethod();&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(myStaticVar);&lt;br /&gt;
    System.out.println(myNonStaticVar);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new MyProgram();  // aehnlich wie&lt;br /&gt;
                      // MyProgram mp = new MyProgram();&lt;br /&gt;
                      // bloß, dass in diesem Fall nur der Konstruktor aufgerufen&lt;br /&gt;
                      // wird. Jedoch nicht eine Instanz zur weiteren verwendung in&lt;br /&gt;
                      // main() erhalten bleibt.&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Augenscheinlich gibt es zwischen der statischen Methode und Variable und der nicht-statischen Methode und Variable keinen Unterschied.&lt;br /&gt;
&lt;br /&gt;
Das liegt aber daran, weil man bei statischen Methoden den Klassennamen der Einfachheit halber weglassen kann und bei nicht-statischen Methoden das &#039;&#039;this&#039;&#039;.&lt;br /&gt;
Ausgeschrieben sieht das Programm folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int myStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public int myNonStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    myStaticVar *= 7;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    myNonStaticVar *= 13;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
    MyProgram.myStaticVar = 6;&lt;br /&gt;
    this.myNonStaticVar = 5;&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(MyProgram.myStaticVar);&lt;br /&gt;
    System.out.println(this.myNonStaticVar);&lt;br /&gt;
    &lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    this.myNonStaticMethod();&lt;br /&gt;
&lt;br /&gt;
    System.out.println(MyProgram.myStaticVar);&lt;br /&gt;
    System.out.println(this.myNonStaticVar);&lt;br /&gt;
&lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    this.myNonStaticMethod();&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(MyProgram.myStaticVar);&lt;br /&gt;
    System.out.println(this.myNonStaticVar);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new MyProgram();&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Noch deutlicher wird der Unterschied, wenn man von außen auf die Instanz zugreift:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int myStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public int myNonStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    myStaticVar *= 7;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    myNonStaticVar *= 13;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyProgram mp1 = new MyProgram();&lt;br /&gt;
    MyProgram mp2 = new MyProgram();&lt;br /&gt;
 &lt;br /&gt;
    MyProgram.myStaticVar = 6;&lt;br /&gt;
    mp1.myNonStaticVar = 5;&lt;br /&gt;
    mp2.myNonStaticVar = 8;&lt;br /&gt;
    &lt;br /&gt;
    System.out.println( MyProgram.myStaticVar );&lt;br /&gt;
    System.out.println( mp1.myNonStaticVar );&lt;br /&gt;
    System.out.println( mp2.myNonStaticVar );&lt;br /&gt;
    &lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    mp1.myNonStaticMethod();&lt;br /&gt;
 &lt;br /&gt;
    System.out.println( MyProgram.myStaticVar );&lt;br /&gt;
    System.out.println( mp1.myNonStaticVar );&lt;br /&gt;
    System.out.println( mp2.myNonStaticVar );&lt;br /&gt;
    &lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
&lt;br /&gt;
    System.out.println( MyProgram.myStaticVar );&lt;br /&gt;
    System.out.println( mp1.myNonStaticVar );&lt;br /&gt;
    System.out.println( mp2.myNonStaticVar );&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sieht man noch mal, daß statische Methoden und Variablen für alle Instanzen und auch statische Methoden wie main() gelten, während nicht-statische Methoden nur für eine bestimmte Instanz ihre Gültigkeit haben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Besonderheiten von statischen Methoden ==&lt;br /&gt;
&lt;br /&gt;
Am Anfang haben wir statische Methoden als äquivalent zu Funktionen in C und anderen nicht-objektorientierten Sprachen kennengelernt.&lt;br /&gt;
Um den Unterschied zwischen statischen und nicht-statischen Methoden zu verstehen, ist es auch für den Anfang ganz sinnvoll es so zu erklären.&lt;br /&gt;
Aber in der objektorientierten Sprache Java, gibt es dann doch einige Zusätze, die es in C z.B. nicht gibt.&lt;br /&gt;
&lt;br /&gt;
Statische Methoden lassen sich genauso wie nicht-statische Methoden ableiten:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class BaseClass {&lt;br /&gt;
&lt;br /&gt;
  public static void printFirstText() {&lt;br /&gt;
    System.out.println(&amp;quot;Dieses ist ein Text in BaseClass&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public static void printSecondText() {&lt;br /&gt;
    System.out.println(&amp;quot;Und noch ein Text in BaseClass&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=java&amp;gt;public class ExternalClass extends BaseClass{&lt;br /&gt;
&lt;br /&gt;
  public static void printSecondText() {&lt;br /&gt;
    System.out.println(&amp;quot;Ein Text in ExternalClass&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
     BaseClass.printFirstText();       // normaler Aufruf&lt;br /&gt;
     BaseClass.printSecondText();      // normaler Aufruf    &lt;br /&gt;
     ExternalClass.printFirstText();   // Methode ist von BaseClass abgeleitet&lt;br /&gt;
     ExternalClass.printSecondText();  // Methode, die die von BaseClass&lt;br /&gt;
                                       // ueberschrieben hat&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es gibt etwas ähnliches wie einen Konstruktor für statische Methoden:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class ExternalClass {&lt;br /&gt;
&lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;die statische Methode wurde aufgerufen.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public static void myOtherStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;eine weitere Methode wurde aufgerufen.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  static {&lt;br /&gt;
    System.out.println(&amp;quot;Es wurde zum erstem Mal statisch auf diese Klasse zugegriffen.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
     ExternalClass.myStaticMethod();&lt;br /&gt;
     ExternalClass.myOtherStaticMethod();&lt;br /&gt;
     ExternalClass.myStaticMethod();&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Diese Möglichkeit wird insbesondere eingesetzt, wenn man statischen Variablen direkt am Anfang bestimmte Werte zuweisen möchte.&lt;br /&gt;
So kann es sein, daß Anfangswert der Variablen erst berechnet werden muß. Oder es handelt sich um eine Liste, die sich nur mit Hilfe einer [[Schleife]] befüllen lässt.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Schleife&amp;diff=5445</id>
		<title>Schleife</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Schleife&amp;diff=5445"/>
		<updated>2013-08-19T09:33:06Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: Die Seite wurde neu angelegt: „Eine Schleife bewirkt, daß sich ein Programmabschnitt mehrmals wiederholt. Bei den meisten Schleifen, werden dabei für jeden Vorgang ein anderer Wert einer Vari…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine Schleife bewirkt, daß sich ein Programmabschnitt mehrmals wiederholt.&lt;br /&gt;
Bei den meisten Schleifen, werden dabei für jeden Vorgang ein anderer Wert einer Variablen benutzt.&lt;br /&gt;
&lt;br /&gt;
Bei Java gibt es folgende Schleifen:&lt;br /&gt;
* [[For-Schleife]]&lt;br /&gt;
* [[For_each-Schleife]]&lt;br /&gt;
* [[While-Schleife]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Static_/_non-static_(Java)&amp;diff=5444</id>
		<title>Static / non-static (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Static_/_non-static_(Java)&amp;diff=5444"/>
		<updated>2013-08-19T09:26:13Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Der Unterschied zwischen statischen und nicht-statischen Methoden und Variablen  ==&lt;br /&gt;
&lt;br /&gt;
Das kleine Wort &#039;&#039;static&#039;&#039; macht einen großen Unterschied.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Statische Methoden ==&lt;br /&gt;
&lt;br /&gt;
Wer nicht-objektorientierte Sprachen wie C kennt, dem dürften statische Methoden vertraut sein. In nicht-objektorientiersten Sprachen heißen Methoden &amp;quot;Funktionen&amp;quot;. Und im Grunde genommen sind statische Methoden genau das: Funktionen wie in C.&lt;br /&gt;
&lt;br /&gt;
Wenn man von einer anderen Klasse auf statische Methoden oder Variablen zugreifen möchte, dann ruft man sie zusammen mit dem Klassennamen auf:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class ExternalClass {&lt;br /&gt;
&lt;br /&gt;
  public static int number=5;&lt;br /&gt;
  private static String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    ExternalClass.myStaticMethod();&lt;br /&gt;
    System.out.println( ExternalClass.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( ExternalClass.number );&lt;br /&gt;
    ExternalClass.number = 13;&lt;br /&gt;
    System.out.println( ExternalClass.number );&lt;br /&gt;
    ExternalClass.printText();&lt;br /&gt;
    ExternalClass.changeText();&lt;br /&gt;
    ExternalClass.printText();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Befinden sich die Methoden und Variablen in der eigenen Klasse, dann sieht es genauso aus:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int number=5;&lt;br /&gt;
  private static String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    System.out.println( MyProgram.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( MyProgram.number );&lt;br /&gt;
    MyProgram.number = 13;&lt;br /&gt;
    System.out.println( MyProgram.number );&lt;br /&gt;
    MyProgram.printText();&lt;br /&gt;
    MyProgram.changeText();&lt;br /&gt;
    MyProgram.printText();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Einsatzzweck für statische Methoden ist somit ähnlich wie bei Funktionen von nicht-objketorientierten Sprachen.&lt;br /&gt;
Statische Variablen sind ein zentraler Ort an dem etwas gespeichert wird.&lt;br /&gt;
&lt;br /&gt;
Beispiele für die Verwendung von statische Methoden im JRE:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    System.out.println( Math.PI );       // PI ist eine statische Variable in der Klasse Math&lt;br /&gt;
    System.out.println( Math.E );        // E ist eine statische Variable in der Klasse Math&lt;br /&gt;
    System.out.println( Math.sin(2) );   // sin() ist eine statische Methode in der Klasse Math&lt;br /&gt;
    System.out.println( Math.log(7) );   // log() ist eine statische Methode in der Klasse Math&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PI ist halt überall immer 3.141..., sin(2) ist überall 0.909..., etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nicht-Statische Methoden ==&lt;br /&gt;
&lt;br /&gt;
Nicht-Statische Methoden und Variablen kommen vor allem in objektorientierten Sprachen vor.&lt;br /&gt;
Um diese aufrufen zu können, muß erst mit &#039;&#039;new&#039;&#039; eine Instanz von der Klasse erstellt werden. Und an dieser kann man dann die Methoden aufrufen. Die Methoden gehören dann zur Instanz:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class ExternalClass {&lt;br /&gt;
&lt;br /&gt;
  public int number=5;&lt;br /&gt;
  private String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public ExternalClass() {&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;nicht-statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    ExternalClass ec1 = new ExternalClass();&lt;br /&gt;
    ec1.myNonStaticMethod();&lt;br /&gt;
    System.out.println( ec1.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( ec1.number );&lt;br /&gt;
    ec1.number = 13;&lt;br /&gt;
    System.out.println( ec1.number );&lt;br /&gt;
    ec1.printText();&lt;br /&gt;
    ec1.changeText();&lt;br /&gt;
    ec1.printText();&lt;br /&gt;
&lt;br /&gt;
    ExternalClass ec2 = new ExternalClass();&lt;br /&gt;
    ec2.printText();&lt;br /&gt;
    ec1.printText();&lt;br /&gt;
&lt;br /&gt;
    ec2.number = 29;&lt;br /&gt;
    System.out.println( ec1.number );&lt;br /&gt;
    System.out.println( ec2.number );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zwar existieren nun genau die gleichen Methoden und Variablen wie bei dem Beispiel mit den statischen Methoden, jedoch existieren sie für jede Instanz unabhängig voneinander.&lt;br /&gt;
&lt;br /&gt;
Befinden sich die Methoden und Variablen in der eigenen Klasse, dann sieht es ähnlich aus. In der eigenen Klasse wird jedoch statt einem Instanznamen das Schlüsselwort &#039;&#039;this&#039;&#039; verwendet:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public int number=5;&lt;br /&gt;
  private String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
    this.myNonStaticMethod();&lt;br /&gt;
    System.out.println( this.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( this.number );&lt;br /&gt;
    this.number = 13;&lt;br /&gt;
    System.out.println( this.number );&lt;br /&gt;
    this.printText();&lt;br /&gt;
    this.changeText();&lt;br /&gt;
    this.printText();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;nicht-statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyProgram p = new MyProgram();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für mehr Informationen zur vorgenommenen Umformung bitte auf [[Vererbung_(Java)]] nachlesen.&lt;br /&gt;
&lt;br /&gt;
Beispiele für die Verwendung von nicht-statische Methoden im JRE:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;MyProgram&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    JLabel l1 = new JLabel(&amp;quot;Label 1&amp;quot;);&lt;br /&gt;
    JTextArea ta = new JTextArea();&lt;br /&gt;
    &lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    p.add(l1);&lt;br /&gt;
    p.add(ta);&lt;br /&gt;
    &lt;br /&gt;
    ta.setPreferredSize(new Dimension(100,50));  // setPreferredSize ist eine nicht-statische&lt;br /&gt;
                                                 // Methode der Klasse JTextArea, von dem ta eine&lt;br /&gt;
                                                 // Instanz ist&lt;br /&gt;
    ta.setBorder(new LineBorder(Color.blue));&lt;br /&gt;
    ta.setText( b2.getText() );                  // Hier wird die Methode getText() von der&lt;br /&gt;
                                                 // Instanz b2 verwendet und ta mit setText()&lt;br /&gt;
                                                 // zugewiesen&lt;br /&gt;
    &lt;br /&gt;
    b1.setPreferredSize(new Dimension(180, 70)); // Die Groesse des Buttons von b1 wird mit&lt;br /&gt;
                                                 // der Methode setPreferredSize(), die in JButton&lt;br /&gt;
                                                 // definiert wurde, veraendert&lt;br /&gt;
    b3.setPreferredSize(new Dimension(160, 90)); // Andere Instanzen von Buttons bleiben davon&lt;br /&gt;
                                                 // unberührt und koennen ebenfalls mit der gleichen&lt;br /&gt;
                                                 // Methode eine andere Groesse erhaltem&lt;br /&gt;
    &lt;br /&gt;
    b1.setBackground(Color.red);                 // Auch hier wieder:&lt;br /&gt;
    b3.setBackground(Color.green);               // zwei verschiedene Buttons, die mit Hilfe der&lt;br /&gt;
                                                 // gleichen Methode setBackground() eine andere&lt;br /&gt;
                                                 // Hintergrundfarbe erhalten.&lt;br /&gt;
    &lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Verwirrungen um static / non-static ==&lt;br /&gt;
&lt;br /&gt;
So unterschiedlich statische und nicht-statische Methoden sind, so kommt es doch bei Anfängern zu Verwirrungen, da es manchmal so aussieht, als täten beide genau das Selbe:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int myStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public int myNonStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    myStaticVar *= 7;    // ist das gleiche wie&lt;br /&gt;
                         // myStaticVar = myStaticVar * 7;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    myNonStaticVar *= 13;  // ist das gleiche wie&lt;br /&gt;
                           // myNonStaticVar = myNonStaticVar * 13;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
    myStaticVar = 6;&lt;br /&gt;
    myNonStaticVar = 5;&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(myStaticVar);&lt;br /&gt;
    System.out.println(myNonStaticVar);&lt;br /&gt;
    &lt;br /&gt;
    myStaticMethod();&lt;br /&gt;
    myNonStaticMethod();&lt;br /&gt;
&lt;br /&gt;
    System.out.println(myStaticVar);&lt;br /&gt;
    System.out.println(myNonStaticVar);&lt;br /&gt;
&lt;br /&gt;
    myStaticMethod();&lt;br /&gt;
    myNonStaticMethod();&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(myStaticVar);&lt;br /&gt;
    System.out.println(myNonStaticVar);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new MyProgram();  // aehnlich wie&lt;br /&gt;
                      // MyProgram mp = new MyProgram();&lt;br /&gt;
                      // bloß, dass in diesem Fall nur der Konstruktor aufgerufen&lt;br /&gt;
                      // wird. Jedoch nicht eine Instanz zur weiteren verwendung in&lt;br /&gt;
                      // main() erhalten bleibt.&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Augenscheinlich gibt es zwischen der statischen Methode und Variable und der nicht-statischen Methode und Variable keinen Unterschied.&lt;br /&gt;
&lt;br /&gt;
Das liegt aber daran, weil man bei statischen Methoden den Klassennamen der Einfachheit halber weglassen kann und bei nicht-statischen Methoden das &#039;&#039;this&#039;&#039;.&lt;br /&gt;
Ausgeschrieben sieht das Programm folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int myStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public int myNonStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    myStaticVar *= 7;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    myNonStaticVar *= 13;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
    MyProgram.myStaticVar = 6;&lt;br /&gt;
    this.myNonStaticVar = 5;&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(MyProgram.myStaticVar);&lt;br /&gt;
    System.out.println(this.myNonStaticVar);&lt;br /&gt;
    &lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    this.myNonStaticMethod();&lt;br /&gt;
&lt;br /&gt;
    System.out.println(MyProgram.myStaticVar);&lt;br /&gt;
    System.out.println(this.myNonStaticVar);&lt;br /&gt;
&lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    this.myNonStaticMethod();&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(MyProgram.myStaticVar);&lt;br /&gt;
    System.out.println(this.myNonStaticVar);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new MyProgram();&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Noch deutlicher wird der Unterschied, wenn man von außen auf die Instanz zugreift:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int myStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public int myNonStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    myStaticVar *= 7;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    myNonStaticVar *= 13;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyProgram mp1 = new MyProgram();&lt;br /&gt;
    MyProgram mp2 = new MyProgram();&lt;br /&gt;
 &lt;br /&gt;
    MyProgram.myStaticVar = 6;&lt;br /&gt;
    mp1.myNonStaticVar = 5;&lt;br /&gt;
    mp2.myNonStaticVar = 8;&lt;br /&gt;
    &lt;br /&gt;
    System.out.println( MyProgram.myStaticVar );&lt;br /&gt;
    System.out.println( mp1.myNonStaticVar );&lt;br /&gt;
    System.out.println( mp2.myNonStaticVar );&lt;br /&gt;
    &lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    mp1.myNonStaticMethod();&lt;br /&gt;
 &lt;br /&gt;
    System.out.println( MyProgram.myStaticVar );&lt;br /&gt;
    System.out.println( mp1.myNonStaticVar );&lt;br /&gt;
    System.out.println( mp2.myNonStaticVar );&lt;br /&gt;
    &lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
&lt;br /&gt;
    System.out.println( MyProgram.myStaticVar );&lt;br /&gt;
    System.out.println( mp1.myNonStaticVar );&lt;br /&gt;
    System.out.println( mp2.myNonStaticVar );&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sieht man noch mal, daß statische Methoden und Variablen für alle Instanzen und auch statische Methoden wie main() gelten, während nicht-statische Methoden nur für eine bestimmte Instanz ihre Gültigkeit haben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Besonderheiten von statischen Methoden ==&lt;br /&gt;
&lt;br /&gt;
Am Anfang haben wir statische Methoden als äquivalent zu Funktionen in C und anderen nicht-objektorientierten Sprachen kennengelernt.&lt;br /&gt;
Um den Unterschied zwischen statischen und nicht-statischen Methoden zu verstehen, ist es auch für den Anfang ganz sinnvoll es so zu erklären.&lt;br /&gt;
Aber in der objektorientierten Sprache Java, gibt es dann doch einige Zusätze, die es in C z.B. nicht gibt.&lt;br /&gt;
&lt;br /&gt;
Statische Methoden lassen sich ableiten:&lt;br /&gt;
&lt;br /&gt;
(diese Beschreibung wird später noch fortgesetzt...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es gibt etwas ähnliches wie einen Konstruktor für statische Methoden:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class ExternalClass {&lt;br /&gt;
&lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;die statische Methode wurde aufgerufen.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public static void myOtherStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;eine weitere Methode wurde aufgerufen.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  static {&lt;br /&gt;
    System.out.println(&amp;quot;Es wurde zum erstem Mal statisch auf diese Klasse zugegriffen.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
     ExternalClass.myStaticMethod();&lt;br /&gt;
     ExternalClass.myOtherStaticMethod();&lt;br /&gt;
     ExternalClass.myStaticMethod();&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Diese Möglichkeit wird insbesondere eingesetzt, wenn man statischen Variablen direkt am Anfang bestimmte Werte zuweisen möchte.&lt;br /&gt;
So kann es sein, daß Anfangswert der Variablen erst berechnet werden muß. Oder es handelt sich um eine Liste, die sich nur mit Hilfe einer [[Schleife]] befüllen lässt.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5417</id>
		<title>Vererbung (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5417"/>
		<updated>2013-08-14T17:02:12Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im folgenden wird in anschaulicher Weise die Vererbung in Java, welches ein Teilbereich der Objektorientierung ist, beschrieben.&lt;br /&gt;
Alle Programme sehen, wenn man sie ausführt, genau gleich aus und bedienen sich auch gleich. Auch wenn der Quellcode immer wieder etwas anders ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fangen wir mit einem einfachen kleinen Programm an, das ein Fenster öffnet und drei Buttons erstellt. Zwei davon sind rot:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
      &lt;br /&gt;
                                          &lt;br /&gt;
            &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
            &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;new&amp;quot; wird ein neues Objekt (eine Instanz) erstellt, das eine Kopie des Hauptobjekts ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Betrachten wir uns nun &#039;&#039;JFrame&#039;&#039;. Man kann in Java eine neue Klasse erstellen (sofern die Klasse, von der sie sich ableitet, nicht &amp;quot;&#039;&#039;private&#039;&#039;&amp;quot; ist), die sämtliche Eigenschaften der Klasse, von der sie abgeleitet wurde, erbt.&lt;br /&gt;
&lt;br /&gt;
In folgendem Programm habe ich nun eine Klasse &#039;&#039;MyFrame&#039;&#039; erstellt, die mittels &#039;&#039;extends&#039;&#039; von der Klasse &#039;&#039;JFrame&#039;&#039; alle Eigenschaften erbt:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame {&lt;br /&gt;
  MyFrame(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
                                          &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Im Programm &#039;&#039;MyProgram&#039;&#039; wird nun &#039;&#039;MyFrame&#039;&#039; auch genau so genutzt und behandelt wie zuvor &#039;&#039;JFrame&#039;&#039;. Und das Ergebnis ist ebenfalls gleich.&lt;br /&gt;
In &#039;&#039;MyProgram&#039;&#039; wird &#039;&#039;MyFrame&#039;&#039; genau ein Argument übergeben: Der String &amp;quot;&#039;&#039;My Window&#039;&#039;&amp;quot;.&lt;br /&gt;
Die Anzahl und Art der Argumente muss im Konstruktor von der &#039;&#039;MyFrame&#039;&#039;-Klasse auch vorkommen: &#039;&#039;MyFrame(String name)&#039;&#039;.&lt;br /&gt;
Und damit dieses Argument wiederum auch an das eigentliche &#039;&#039;JFrame&#039;&#039; übergeben wird, steht dort &#039;&#039;super(name)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MyFrame&#039;&#039; ist ein neues Objekt. Ich kann ihm sämtliche Eigenschaften meines Programms geben:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame {&lt;br /&gt;
&lt;br /&gt;
  MyFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Somit wird nun nur &#039;&#039;MyFrame&#039;&#039; aufgerufen. In &#039;&#039;MyFrame&#039;&#039; ist alles drin enthalten.&lt;br /&gt;
Man muss es wie eine Komponente sehen. Das Programmm sieht zwar beim Ausführen wieder genau gleich aus, aber vom Programmaufbau ist es nun etwas anders. Ich kann z.B. nun &#039;&#039;MyFrame&#039;&#039; als Komponente in andere Programme integrieren. Befehle wie &#039;&#039;JButton&#039;&#039; brauche ich in dem anderen Programm dann nicht zu schreiben.&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;main()&#039;&#039;-Methode in &#039;&#039;MyProgram&#039;&#039; kann man in jede beliebige Klasse schreiben. So kann man sie auch direkt in &#039;&#039;MyFrame&#039;&#039; schreiben:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame {&lt;br /&gt;
&lt;br /&gt;
  MyFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das hat den enormen Vorteil, dass man in Java in mehreren Klassen &#039;&#039;main()&#039;&#039;-Methoden haben kann.&lt;br /&gt;
Man kann dann das Programm entweder von der eigentlichen Klasse aus starten oder aber auch einfach die &#039;&#039;main()&#039;&#039;-Methode in einer der Komponenten. In letzterem Fall hat man dann z.B. ein Programm, das nur die eine Komponente ausführt. Somit muss man nicht immer das ganze Programm starten, wenn man nur mal kurz Veränderungen an einer Komponente testen will.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Genauso wie wir nun &#039;&#039;MyFrame&#039;&#039; erstellt haben, können wir auch eine Klasse namens &#039;&#039;RedButton&#039;&#039; erstellen, dessen Aufgabe es ist, einen roten Button zu erstellen:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle sieht man auch besser den Sinn der abgeleiteten Klassen. Nun wurden zwei &#039;&#039;JButton&#039;&#039;s direkt zu &#039;&#039;RedButton&#039;&#039;s. Wenn man bedenkt, dass sämtliche Swing-Komponenten wie &#039;&#039;JButton&#039;&#039; gezeichnet werden, so ist es eine erhebliche Arbeitserleichterung, dass das Programm dahinter nur einmal geschrieben wurde und dann immer wieder genutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Zu guter Letzt nun auch noch mal die Klasse &#039;&#039;RedButton&#039;&#039; in Kombination mit der Klasse &#039;&#039;MyFrame&#039;&#039;:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame {&lt;br /&gt;
&lt;br /&gt;
  MyFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Static_/_non-static_(Java)&amp;diff=5416</id>
		<title>Static / non-static (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Static_/_non-static_(Java)&amp;diff=5416"/>
		<updated>2013-08-14T16:56:43Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: Die Seite wurde neu angelegt: „== Der Unterschied zwischen statischen und nicht-statischen Methoden und Variablen  ==  Das kleine Wort &amp;#039;&amp;#039;static&amp;#039;&amp;#039; macht einen großen Unterschied.   == Statische…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Der Unterschied zwischen statischen und nicht-statischen Methoden und Variablen  ==&lt;br /&gt;
&lt;br /&gt;
Das kleine Wort &#039;&#039;static&#039;&#039; macht einen großen Unterschied.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Statische Methoden ==&lt;br /&gt;
&lt;br /&gt;
Wer nicht-objektorientierte Sprachen wie C kennt, dem dürften statische Methoden vertraut sein. In nicht-objektorientiersten Sprachen heißen Methoden &amp;quot;Funktionen&amp;quot;. Und im Grunde genommen sind statische Methoden genau das: Funktionen wie in C.&lt;br /&gt;
&lt;br /&gt;
Wenn man von einer anderen Klasse auf statische Methoden oder Variablen zugreifen möchte, dann ruft man sie zusammen mit dem Klassennamen auf:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class ExternalClass {&lt;br /&gt;
&lt;br /&gt;
  public static int number=5;&lt;br /&gt;
  private static String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    ExternalClass.myStaticMethod();&lt;br /&gt;
    System.out.println( ExternalClass.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( ExternalClass.number );&lt;br /&gt;
    ExternalClass.number = 13;&lt;br /&gt;
    System.out.println( ExternalClass.number );&lt;br /&gt;
    ExternalClass.printText();&lt;br /&gt;
    ExternalClass.changeText();&lt;br /&gt;
    ExternalClass.printText();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Befinden sich die Methoden und Variablen in der eigenen Klasse, dann sieht es genauso aus:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int number=5;&lt;br /&gt;
  private static String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    System.out.println( MyProgram.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( MyProgram.number );&lt;br /&gt;
    MyProgram.number = 13;&lt;br /&gt;
    System.out.println( MyProgram.number );&lt;br /&gt;
    MyProgram.printText();&lt;br /&gt;
    MyProgram.changeText();&lt;br /&gt;
    MyProgram.printText();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Einsatzzweck für statische Methoden ist somit ähnlich wie bei Funktionen von nicht-objketorientierten Sprachen.&lt;br /&gt;
Statische Variablen sind ein zentraler Ort an dem etwas gespeichert wird.&lt;br /&gt;
&lt;br /&gt;
Beispiele für die Verwendung von statische Methoden im JRE:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    System.out.println( Math.PI );       // PI ist eine statische Variable in der Klasse Math&lt;br /&gt;
    System.out.println( Math.E );        // E ist eine statische Variable in der Klasse Math&lt;br /&gt;
    System.out.println( Math.sin(2) );   // sin() ist eine statische Methode in der Klasse Math&lt;br /&gt;
    System.out.println( Math.log(7) );   // log() ist eine statische Methode in der Klasse Math&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PI ist halt überall immer 3.141..., sin(2) ist überall 0.909..., etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nicht-Statische Methoden ==&lt;br /&gt;
&lt;br /&gt;
Nicht-Statische Methoden und Variablen kommen vor allem in objektorientierten Sprachen vor.&lt;br /&gt;
Um diese aufrufen zu können, muß erst mit &#039;&#039;new&#039;&#039; eine Instanz von der Klasse erstellt werden. Und an dieser kann man dann die Methoden aufrufen. Die Methoden gehören dann zur Instanz:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class ExternalClass {&lt;br /&gt;
&lt;br /&gt;
  public int number=5;&lt;br /&gt;
  private String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public ExternalClass() {&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;nicht-statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    ExternalClass ec1 = new ExternalClass();&lt;br /&gt;
    ec1.myNonStaticMethod();&lt;br /&gt;
    System.out.println( ec1.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( ec1.number );&lt;br /&gt;
    ec1.number = 13;&lt;br /&gt;
    System.out.println( ec1.number );&lt;br /&gt;
    ec1.printText();&lt;br /&gt;
    ec1.changeText();&lt;br /&gt;
    ec1.printText();&lt;br /&gt;
&lt;br /&gt;
    ExternalClass ec2 = new ExternalClass();&lt;br /&gt;
    ec2.printText();&lt;br /&gt;
    ec1.printText();&lt;br /&gt;
&lt;br /&gt;
    ec2.number = 29;&lt;br /&gt;
    System.out.println( ec1.number );&lt;br /&gt;
    System.out.println( ec2.number );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zwar existieren nun genau die gleichen Methoden und Variablen wie bei dem Beispiel mit den statischen Methoden, jedoch existieren sie für jede Instanz unabhängig voneinander.&lt;br /&gt;
&lt;br /&gt;
Befinden sich die Methoden und Variablen in der eigenen Klasse, dann sieht es ähnlich aus. In der eigenen Klasse wird jedoch statt einem Instanznamen das Schlüsselwort &#039;&#039;this&#039;&#039; verwendet:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public int number=5;&lt;br /&gt;
  private String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
    this.myNonStaticMethod();&lt;br /&gt;
    System.out.println( this.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( this.number );&lt;br /&gt;
    this.number = 13;&lt;br /&gt;
    System.out.println( this.number );&lt;br /&gt;
    this.printText();&lt;br /&gt;
    this.changeText();&lt;br /&gt;
    this.printText();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;nicht-statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyProgram p = new MyProgram();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für mehr Informationen zur vorgenommenen Umformung bitte auf [[Vererbung_(Java)]] nachlesen.&lt;br /&gt;
&lt;br /&gt;
Beispiele für die Verwendung von nicht-statische Methoden im JRE:&lt;br /&gt;
&lt;br /&gt;
(diese Beschreibung wird später noch fortgesetzt...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5414</id>
		<title>Vererbung (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5414"/>
		<updated>2013-08-13T19:58:54Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im folgenden wird in anschaulicher Weise die Vererbung in Java, welches ein Teilbereich der Objektorientierung ist, beschrieben.&lt;br /&gt;
Alle Programme sehen, wenn man sie ausführt, genau gleich aus und bedienen sich auch gleich. Auch wenn der Quellcode immer wieder etwas anders ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fangen wir mit einem einfachen kleinen Programm an, das ein Fenster öffnet und drei Buttons erstellt. Zwei davon sind rot:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
      &lt;br /&gt;
                                          &lt;br /&gt;
            &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
            &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;new&amp;quot; wird ein neues Objekt (eine Instanz) erstellt, das eine Kopie des Hauptobjekts ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Betrachten wir uns nun &#039;&#039;JFrame&#039;&#039;. Man kann in Java eine neue Klasse erstellen (sofern die Klasse, von der sie sich ableitet, nicht &amp;quot;&#039;&#039;private&#039;&#039;&amp;quot; ist), die sämtliche Eigenschaften der Klasse, von der sie abgeleitet wurde, erbt.&lt;br /&gt;
&lt;br /&gt;
In folgendem Programm habe ich nun eine Klasse &#039;&#039;MyFrame&#039;&#039; erstellt, die mittels &#039;&#039;extends&#039;&#039; von der Klasse &#039;&#039;JFrame&#039;&#039; alle Eigenschaften erbt:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame{&lt;br /&gt;
  MyFrame(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
                                          &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Im Programm &#039;&#039;MyProgram&#039;&#039; wird nun &#039;&#039;MyFrame&#039;&#039; auch genau so genutzt und behandelt wie zuvor &#039;&#039;JFrame&#039;&#039;. Und das Ergebnis ist ebenfalls gleich.&lt;br /&gt;
In &#039;&#039;MyProgram&#039;&#039; wird &#039;&#039;MyFrame&#039;&#039; genau ein Argument übergeben: Der String &amp;quot;&#039;&#039;My Window&#039;&#039;&amp;quot;.&lt;br /&gt;
Die Anzahl und Art der Argumente muss im Konstruktor von der &#039;&#039;MyFrame&#039;&#039;-Klasse auch vorkommen: &#039;&#039;MyFrame(String name)&#039;&#039;.&lt;br /&gt;
Und damit dieses Argument wiederum auch an das eigentliche &#039;&#039;JFrame&#039;&#039; übergeben wird, steht dort &#039;&#039;super(name)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MyFrame&#039;&#039; ist ein neues Objekt. Ich kann ihm sämtliche Eigenschaften meines Programms geben:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  MyFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Somit wird nun nur &#039;&#039;MyFrame&#039;&#039; aufgerufen. In &#039;&#039;MyFrame&#039;&#039; ist alles drin enthalten.&lt;br /&gt;
Man muss es wie eine Komponente sehen. Das Programmm sieht zwar beim Ausführen wieder genau gleich aus, aber vom Programmaufbau ist es nun etwas anders. Ich kann z.B. nun &#039;&#039;MyFrame&#039;&#039; als Komponente in andere Programme integrieren. Befehle wie &#039;&#039;JButton&#039;&#039; brauche ich in dem anderen Programm dann nicht zu schreiben.&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;main()&#039;&#039;-Methode in &#039;&#039;MyProgram&#039;&#039; kann man in jede beliebige Klasse schreiben. So kann man sie auch direkt in &#039;&#039;MyFrame&#039;&#039; schreiben:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  MyFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das hat den enormen Vorteil, dass man in Java in mehreren Klassen &#039;&#039;main()&#039;&#039;-Methoden haben kann.&lt;br /&gt;
Man kann dann das Programm entweder von der eigentlichen Klasse aus starten oder aber auch einfach die &#039;&#039;main()&#039;&#039;-Methode in einer der Komponenten. In letzterem Fall hat man dann z.B. ein Programm, das nur die eine Komponente ausführt. Somit muss man nicht immer das ganze Programm starten, wenn man nur mal kurz Veränderungen an einer Komponente testen will.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Genauso wie wir nun &#039;&#039;MyFrame&#039;&#039; erstellt haben, können wir auch eine Klasse namens &#039;&#039;RedButton&#039;&#039; erstellen, dessen Aufgabe es ist, einen roten Button zu erstellen:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle sieht man auch besser den Sinn der abgeleiteten Klassen. Nun wurden zwei &#039;&#039;JButton&#039;&#039;s direkt zu &#039;&#039;RedButton&#039;&#039;s. Wenn man bedenkt, dass sämtliche Swing-Komponenten wie &#039;&#039;JButton&#039;&#039; gezeichnet werden, so ist es eine erhebliche Arbeitserleichterung, dass das Programm dahinter nur einmal geschrieben wurde und dann immer wieder genutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Zu guter Letzt nun auch noch mal die Klasse &#039;&#039;RedButton&#039;&#039; in Kombination mit der Klasse &#039;&#039;MyFrame&#039;&#039;:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  MyFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5413</id>
		<title>Vererbung (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5413"/>
		<updated>2013-08-13T18:53:37Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im folgenden wird in anschaulicher Weise die Vererbung in Java, welches ein Teilbereich der Objektorientierung ist, beschrieben.&lt;br /&gt;
Alle Programme sehen, wenn man sie ausführt, genau gleich aus und bedienen sich auch gleich. Auch wenn der Quellcode immer wieder etwas anders ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fangen wir mit einem einfachen kleinen Programm an, das ein Fenster öffnet und drei Buttons erstellt. Zwei davon sind rot:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
      &lt;br /&gt;
                                          &lt;br /&gt;
            &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
            &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;new&amp;quot; wird ein neues Objekt (eine Instanz) erstellt, das eine Kopie des Hauptobjekts ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Betrachten wir uns nun &#039;&#039;JFrame&#039;&#039;. Man kann in Java eine neue Klasse erstellen (sofern die Klasse, von der sie sich ableitet, nicht &amp;quot;&#039;&#039;private&#039;&#039;&amp;quot; ist), die sämtliche Eigenschaften der Klasse, von der sie abgeleitet wurde, erbt.&lt;br /&gt;
&lt;br /&gt;
In folgendem Programm habe ich nun eine Klasse &#039;&#039;MyFrame&#039;&#039; erstellt, die mittels &#039;&#039;extends&#039;&#039; von der Klasse &#039;&#039;JFrame&#039;&#039; alle Eigenschaften erbt:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame{&lt;br /&gt;
  MyFrame(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
                                          &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Im Programm &#039;&#039;MyProgram&#039;&#039; wird nun &#039;&#039;MyFrame&#039;&#039; auch genau so genutzt und behandelt wie zuvor &#039;&#039;JFrame&#039;&#039;. Und das Ergebnis ist ebenfalls gleich.&lt;br /&gt;
In &#039;&#039;MyProgram&#039;&#039; wird &#039;&#039;MyFrame&#039;&#039; genau ein Argument übergeben: Der String &amp;quot;&#039;&#039;My Window&#039;&#039;&amp;quot;.&lt;br /&gt;
Die Anzahl und Art der Argumente muss im Konstruktor von der &#039;&#039;MyFrame&#039;&#039;-Klasse auch vorkommen: &#039;&#039;MyFrame(String name)&#039;&#039;.&lt;br /&gt;
Und damit dieses Argument wiederum auch an das eigentliche &#039;&#039;JFrame&#039;&#039; übergeben wird, steht dort &#039;&#039;super(name)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MyFrame&#039;&#039; ist ein neues Objekt. Ich kann ihm sämtliche Eigenschaften meines Programms geben:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  MyFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Somit wird nun nur &#039;&#039;MyFrame&#039;&#039; aufgerufen. In &#039;&#039;MyFrame&#039;&#039; ist alles drin enthalten.&lt;br /&gt;
Man muss es wie eine Komponente sehen. Das Programmm sieht zwar beim Ausführen wieder genau gleich aus, aber vom Programmaufbau ist es nun etwas anders. Ich kann z.B. nun &#039;&#039;MyFrame&#039;&#039; als Komponente in andere Programme integrieren. Befehle wie &#039;&#039;JButton&#039;&#039; brauche ich in dem anderen Programm dann nicht zu schreiben.&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;main()&#039;&#039;-Methode in &#039;&#039;MyProgram&#039;&#039; kann man in jede beliebige Klasse schreiben. So kann man sie auch direkt in &#039;&#039;MyFrame&#039;&#039; schreiben:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  MyFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das hat den enormen Vorteil, dass man in Java in mehreren Klassen &#039;&#039;main()&#039;&#039;-Methoden haben kann.&lt;br /&gt;
Man kann dann das Programm entweder von der eigentlichen Klasse aus starten oder aber auch einfach die &#039;&#039;main()&#039;&#039;-Methode in einer der Komponenten. In letzterem Fall hat man dann z.B. ein Programm, das nur die eine Komponente ausführt. Somit muss man nicht immer das ganze Programm starten, wenn man nur mal kurz Veränderungen an einer Komponente testen will.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Genauso wie wir nun &#039;&#039;MyFrame&#039;&#039; erstellt haben, können wir auch eine Klasse namens &#039;&#039;RedButton&#039;&#039; erstellen, dessen Aufgabe es ist, einen roten Button zu erstellen:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle sieht man auch besser den Sinn der abgeleiteten Klassen. Nun wurden zwei &#039;&#039;JButton&#039;&#039;s direkt zu &#039;&#039;RedButton&#039;&#039;s. Wenn man bedenkt, dass sämtliche Swing-Komponenten wie &#039;&#039;JButton&#039;&#039; gezeichnet werden, so ist es eine erhebliche Arbeitserleichterung, dass das Programm dahinter nur einmal geschrieben wurde und dann immer wieder genutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Zu guter Letzt nun auch noch mal die Klasse &#039;&#039;RedButton&#039;&#039; in Kombination mit der Klasse &#039;&#039;MyFrame&#039;&#039;:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  MyFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5412</id>
		<title>Vererbung (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5412"/>
		<updated>2013-08-13T18:51:12Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im folgenden wird in anschaulicher Weise die Vererbung in Java, welches ein Teilbereich der Objektorientierung ist, beschrieben.&lt;br /&gt;
Alle Programme sehen, wenn man sie ausführt, genau gleich aus und bedienen sich auch gleich. Auch wenn der Quellcode immer wieder etwas anders ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fangen wir mit einem einfachen kleinen Programm an, das ein Fenster öffnet und drei Buttons erstellt. Zwei davon sind rot:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
      &lt;br /&gt;
                                          &lt;br /&gt;
            &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
            &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;new&amp;quot; wird ein neues Objekt (eine Instanz) erstellt, das eine Kopie des Hauptobjekts ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Betrachten wir uns nun &#039;&#039;JFrame&#039;&#039;. Man kann in Java eine neue Klasse erstellen (sofern die Klasse, von der sie sich ableitet, nicht &amp;quot;&#039;&#039;private&#039;&#039;&amp;quot; ist), die sämtliche Eigenschaften der Klasse, von der sie abgeleitet wurde, erbt.&lt;br /&gt;
&lt;br /&gt;
In folgendem Programm habe ich nun eine Klasse &#039;&#039;MyFrame&#039;&#039; erstellt, die mittels &#039;&#039;extends&#039;&#039; von der Klasse &#039;&#039;JFrame&#039;&#039; alle Eigenschaften erbt:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame{&lt;br /&gt;
  MyFrame(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
                                          &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Im Programm &#039;&#039;myProgram&#039;&#039; wird nun &#039;&#039;MyFrame&#039;&#039; auch genau so genutzt und behandelt wie zuvor &#039;&#039;JFrame&#039;&#039;. Und das Ergebnis ist ebenfalls gleich.&lt;br /&gt;
In &#039;&#039;myProgram&#039;&#039; wird &#039;&#039;MyFrame&#039;&#039; genau ein Argument übergeben: Der String &amp;quot;&#039;&#039;My Window&#039;&#039;&amp;quot;.&lt;br /&gt;
Die Anzahl und Art der Argumente muss im Konstruktor von der &#039;&#039;MyFrame&#039;&#039;-Klasse auch vorkommen: &#039;&#039;MyFrame(String name)&#039;&#039;.&lt;br /&gt;
Und damit dieses Argument wiederum auch an das eigentliche &#039;&#039;JFrame&#039;&#039; übergeben wird, steht dort &#039;&#039;super(name)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MyFrame&#039;&#039; ist ein neues Objekt. Ich kann ihm sämtliche Eigenschaften meines Programms geben:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  MyFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Somit wird nun nur &#039;&#039;MyFrame&#039;&#039; aufgerufen. In &#039;&#039;MyFrame&#039;&#039; ist alles drin enthalten.&lt;br /&gt;
Man muss es wie eine Komponente sehen. Das Programmm sieht zwar beim Ausführen wieder genau gleich aus, aber vom Programmaufbau ist es nun etwas anders. Ich kann z.B. nun &#039;&#039;MyFrame&#039;&#039; als Komponente in andere Programme integrieren. Befehle wie &#039;&#039;JButton&#039;&#039; brauche ich in dem anderen Programm dann nicht zu schreiben.&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;main()&#039;&#039;-Methode in &#039;&#039;myProgram&#039;&#039; kann man in jede beliebige Klasse schreiben. So kann man sie auch direkt in &#039;&#039;MyFrame&#039;&#039; schreiben:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  MyFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das hat den enormen Vorteil, dass man in Java in mehreren Klassen &#039;&#039;main()&#039;&#039;-Methoden haben kann.&lt;br /&gt;
Man kann dann das Programm entweder von der eigentlichen Klasse aus starten oder aber auch einfach die &#039;&#039;main()&#039;&#039;-Methode in einer der Komponenten. In letzterem Fall hat man dann z.B. ein Programm, das nur die eine Komponente ausführt. Somit muss man nicht immer das ganze Programm starten, wenn man nur mal kurz Veränderungen an einer Komponente testen will.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Genauso wie wir nun &#039;&#039;MyFrame&#039;&#039; erstellt haben, können wir auch eine Klasse namens &#039;&#039;RedButton&#039;&#039; erstellen, dessen Aufgabe es ist, einen roten Button zu erstellen:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle sieht man auch besser den Sinn der abgeleiteten Klassen. Nun wurden zwei &#039;&#039;JButton&#039;&#039;s direkt zu &#039;&#039;RedButton&#039;&#039;s. Wenn man bedenkt, dass sämtliche Swing-Komponenten wie &#039;&#039;JButton&#039;&#039; gezeichnet werden, so ist es eine erhebliche Arbeitserleichterung, dass das Programm dahinter nur einmal geschrieben wurde und dann immer wieder genutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Zu guter Letzt nun auch noch mal die Klasse &#039;&#039;RedButton&#039;&#039; in Kombination mit der Klasse &#039;&#039;MyFrame&#039;&#039;:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  MyFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5411</id>
		<title>Vererbung (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5411"/>
		<updated>2013-08-13T18:47:10Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im folgenden wird in anschaulicher Weise die Vererbung in Java, welches ein Teilbereich der Objektorientierung ist, beschrieben.&lt;br /&gt;
Alle Programme sehen, wenn man sie ausführt, genau gleich aus und bedienen sich auch gleich. Auch wenn der Quellcode immer wieder etwas anders ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fangen wir mit einem einfachen kleinen Programm an, das ein Fenster öffnet und drei Buttons erstellt. Zwei davon sind rot:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
      &lt;br /&gt;
                                          &lt;br /&gt;
            &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
            &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;new&amp;quot; wird ein neues Objekt (eine Instanz) erstellt, das eine Kopie des Hauptobjekts ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Betrachten wir uns nun &#039;&#039;JFrame&#039;&#039;. Man kann in Java eine neue Klasse erstellen (sofern die Klasse, von der sie sich ableitet, nicht &amp;quot;&#039;&#039;private&#039;&#039;&amp;quot; ist), die sämtliche Eigenschaften der Klasse, von der sie abgeleitet wurde, erbt.&lt;br /&gt;
&lt;br /&gt;
In folgendem Programm habe ich nun eine Klasse &#039;&#039;MyFrame&#039;&#039; erstellt, die mittels &#039;&#039;extends&#039;&#039; von der Klasse &#039;&#039;JFrame&#039;&#039; alle Eigenschaften erbt:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame{&lt;br /&gt;
  MyFrame(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
                                          &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Im Programm &#039;&#039;myProgram&#039;&#039; wird nun &#039;&#039;MyFrame&#039;&#039; auch genau so genutzt und behandelt wie zuvor &#039;&#039;JFrame&#039;&#039;. Und das Ergebnis ist ebenfalls gleich.&lt;br /&gt;
In &#039;&#039;myProgram&#039;&#039; wird &#039;&#039;MyFrame&#039;&#039; genau ein Argument übergeben: Der String &amp;quot;&#039;&#039;My Window&#039;&#039;&amp;quot;.&lt;br /&gt;
Die Anzahl und Art der Argumente muss im Konstruktor von der &#039;&#039;MyFrame&#039;&#039;-Klasse auch vorkommen: &#039;&#039;MyFrame(String name)&#039;&#039;.&lt;br /&gt;
Und damit dieses Argument wiederum auch an das eigentliche &#039;&#039;JFrame&#039;&#039; übergeben wird, steht dort &#039;&#039;super(name)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MyFrame&#039;&#039; ist ein neues Objekt. Ich kann ihm sämtliche Eigenschaften meines Programms geben:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  MyFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Somit wird nun nur &#039;&#039;MyFrame&#039;&#039; aufgerufen. In &#039;&#039;MyFrame&#039;&#039; ist alles drin enthalten.&lt;br /&gt;
Man muss es wie eine Komponente sehen. Das Programmm sieht zwar beim Ausführen wieder genau gleich aus, aber vom Programmaufbau ist es nun etwas anders. Ich kann z.B. nun &#039;&#039;MyFrame&#039;&#039; als Komponente in andere Programme integrieren. Befehle wie &#039;&#039;JButton&#039;&#039; brauche ich in dem anderen Programm dann nicht zu schreiben.&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;main()&#039;&#039;-Methode in &#039;&#039;myProgram&#039;&#039; kann man in jede beliebige Klasse schreiben. So kann man sie auch direkt in &#039;&#039;MyFrame&#039;&#039; schreiben:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  MyFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das hat den enormen Vorteil, dass man in Java in mehreren Klassen &#039;&#039;main()&#039;&#039;-Methoden haben kann.&lt;br /&gt;
Man kann dann das Programm entweder von der eigentlichen Klasse aus starten oder aber auch einfach die &#039;&#039;main()&#039;&#039;-Methode in einer der Komponenten. In letzterem Fall hat man dann z.B. ein Programm, das nur die eine Komponente ausführt. Somit muss man nicht immer das ganze Programm starten, wenn man nur mal kurz Veränderungen an einer Komponente testen will.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Genauso wie wir nun &#039;&#039;MyFrame&#039;&#039; erstellt haben, können wir auch eine Klasse namens &#039;&#039;RedButton&#039;&#039; erstellen, dessen Aufgabe es ist, einen roten Button zu erstellen:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle sieht man auch besser den Sinn der abgeleiteten Klassen. Nun wurden zwei &#039;&#039;JButton&#039;&#039;s direkt zu &#039;&#039;RedButton&#039;&#039;s. Wenn man bedenkt, dass sämtliche Swing-Komponenten wie &#039;&#039;JButton&#039;&#039; gezeichnet werden, so ist es eine erhebliche Arbeitserleichterung, dass das Programm dahinter nur einmal geschrieben wurde und dann immer wieder genutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Zu guter Letzt nun auch noch mal die Klasse &#039;&#039;RedButton&#039;&#039; in Kombination mit der Klasse &#039;&#039;MyFrame&#039;&#039;:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class MyFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  MyFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyFrame f = new MyFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5410</id>
		<title>Vererbung (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5410"/>
		<updated>2013-08-13T18:41:53Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im folgenden wird in anschaulicher Weise die Vererbung in Java, welches ein Teilbereich der Objektorientierung ist, beschrieben.&lt;br /&gt;
Alle Programme sehen, wenn man sie ausführt, genau gleich aus und bedienen sich auch gleich. Auch wenn der Quellcode immer wieder etwas anders ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fangen wir mit einem einfachen kleinen Programm an, das ein Fenster öffnet und drei Buttons erstellt. Zwei davon sind rot:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
      &lt;br /&gt;
                                          &lt;br /&gt;
            &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
            &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;new&amp;quot; wird ein neues Objekt (eine Instanz) erstellt, das eine Kopie des Hauptobjekts ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Betrachten wir uns nun &#039;&#039;JFrame&#039;&#039;. Man kann in Java eine neue Klasse erstellen (sofern die Klasse, von der sie sich ableitet, nicht &amp;quot;&#039;&#039;private&#039;&#039;&amp;quot; ist), die sämtliche Eigenschaften der Klasse, von der sie abgeleitet wurde, erbt.&lt;br /&gt;
&lt;br /&gt;
In folgendem Programm habe ich nun eine Klasse &#039;&#039;myFrame&#039;&#039; erstellt, die mittels &#039;&#039;extends&#039;&#039; von der Klasse &#039;&#039;JFrame&#039;&#039; alle Eigenschaften erbt:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
  myFrame(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
                                          &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Im Programm &#039;&#039;myProgram&#039;&#039; wird nun &#039;&#039;myFrame&#039;&#039; auch genau so genutzt und behandelt wie zuvor &#039;&#039;JFrame&#039;&#039;. Und das Ergebnis ist ebenfalls gleich.&lt;br /&gt;
In &#039;&#039;myProgram&#039;&#039; wird &#039;&#039;myFrame&#039;&#039; genau ein Argument übergeben: Der String &amp;quot;&#039;&#039;My Window&#039;&#039;&amp;quot;.&lt;br /&gt;
Die Anzahl und Art der Argumente muss im Konstruktor von der &#039;&#039;myFrame&#039;&#039;-Klasse auch vorkommen: &#039;&#039;myFrame(String name)&#039;&#039;.&lt;br /&gt;
Und damit dieses Argument wiederum auch an das eigentliche &#039;&#039;JFrame&#039;&#039; übergeben wird, steht dort &#039;&#039;super(name)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;myFrame&#039;&#039; ist ein neues Objekt. Ich kann ihm sämtliche Eigenschaften meines Programms geben:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  myFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Somit wird nun nur &#039;&#039;myFrame&#039;&#039; aufgerufen. In &#039;&#039;myFrame&#039;&#039; ist alles drin enthalten.&lt;br /&gt;
Man muss es wie eine Komponente sehen. Das Programmm sieht zwar beim Ausführen wieder genau gleich aus, aber vom Programmaufbau ist es nun etwas anders. Ich kann z.B. nun &#039;&#039;myFrame&#039;&#039; als Komponente in andere Programme integrieren. Befehle wie &#039;&#039;JButton&#039;&#039; brauche ich in dem anderen Programm dann nicht zu schreiben.&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;main()&#039;&#039;-Methode in &#039;&#039;myProgram&#039;&#039; kann man in jede beliebige Klasse schreiben. So kann man sie auch direkt in &#039;&#039;myFrame&#039;&#039; schreiben:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  myFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das hat den enormen Vorteil, dass man in Java in mehreren Klassen &#039;&#039;main()&#039;&#039;-Methoden haben kann.&lt;br /&gt;
Man kann dann das Programm entweder von der eigentlichen Klasse aus starten oder aber auch einfach die &#039;&#039;main()&#039;&#039;-Methode in einer der Komponenten. In letzterem Fall hat man dann z.B. ein Programm, das nur die eine Komponente ausführt. Somit muss man nicht immer das ganze Programm starten, wenn man nur mal kurz Veränderungen an einer Komponente testen will.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Genauso wie wir nun &#039;&#039;myFrame&#039;&#039; erstellt haben, können wir auch eine Klasse namens &#039;&#039;RedButton&#039;&#039; erstellen, dessen Aufgabe es ist, einen roten Button zu erstellen:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle sieht man auch besser den Sinn der abgeleiteten Klassen. Nun wurden zwei &#039;&#039;JButton&#039;&#039;s direkt zu &#039;&#039;RedButton&#039;&#039;s. Wenn man bedenkt, dass sämtliche Swing-Komponenten wie &#039;&#039;JButton&#039;&#039; gezeichnet werden, so ist es eine erhebliche Arbeitserleichterung, dass das Programm dahinter nur einmal geschrieben wurde und dann immer wieder genutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Zu guter Letzt nun auch noch mal die Klasse &#039;&#039;RedButton&#039;&#039; in Kombination mit der Klasse &#039;&#039;myFrame&#039;&#039;:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  myFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5409</id>
		<title>Vererbung (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5409"/>
		<updated>2013-08-13T18:29:52Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im folgenden wird in anschaulicher Weise die Vererbung in Java, welches ein Teilbereich der Objektorientierung ist, beschrieben.&lt;br /&gt;
Alle Programme sehen, wenn man sie ausführt, genau gleich aus und bedienen sich auch gleich. Auch wenn der Quellcode immer wieder etwas anders ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fangen wir mit einem einfachen kleinen Programm an, das ein Fenster öffnet und drei Buttons erstellt. Zwei davon sind rot:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
      &lt;br /&gt;
                                          &lt;br /&gt;
            &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
            &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;new&amp;quot; wird ein neues Objekt (eine Instanz) erstellt, das eine Kopie des Hauptobjekts ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Betrachten wir uns nun &#039;&#039;JFrame&#039;&#039;. Man kann in Java eine neue Klasse erstellen (sofern die Klasse, von der sie sich ableitet, nicht &amp;quot;&#039;&#039;private&#039;&#039;&amp;quot; ist), die sämtliche Eigenschaften der Klasse, von der sie abgeleitet wurde, erbt.&lt;br /&gt;
&lt;br /&gt;
In folgendem Programm habe ich nun eine Klasse &#039;&#039;myFrame&#039;&#039; erstellt, die mittels &#039;&#039;extends&#039;&#039; von der Klasse &#039;&#039;JFrame&#039;&#039; alle Eigenschaften erbt:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
  myFrame(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
                                          &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Im Programm &#039;&#039;myProgram&#039;&#039; wird nun &#039;&#039;myFrame&#039;&#039; auch genau so genutzt und behandelt wie zuvor &#039;&#039;JFrame&#039;&#039;. Und das Ergebnis ist ebenfalls gleich.&lt;br /&gt;
In &#039;&#039;myProgram&#039;&#039; wird &#039;&#039;myFrame&#039;&#039; genau ein Argument übergeben: Der String &amp;quot;&#039;&#039;My Window&#039;&#039;&amp;quot;.&lt;br /&gt;
Die Anzahl und Art der Argumente muss im Konstruktor von der &#039;&#039;myFrame&#039;&#039;-Klasse auch vorkommen: &#039;&#039;myFrame(String name)&#039;&#039;.&lt;br /&gt;
Und damit dieses Argument wiederum auch an das eigentliche &#039;&#039;JFrame&#039;&#039; übergeben wird, steht dort &#039;&#039;super(name)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;myFrame&#039;&#039; ist ein neues Objekt. Ich kann ihm sämtliche Eigenschaften meines Programms geben:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  myFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Somit wird nun nur &#039;&#039;myFrame&#039;&#039; aufgerufen. In &#039;&#039;myFrame&#039;&#039; ist alles drin enthalten.&lt;br /&gt;
Man muss es wie eine Komponente sehen. Das Programmm sieht zwar beim Ausführen wieder genau gleich aus, aber vom Programmaufbau ist es nun etwas anders. Ich kann z.B. nun &#039;&#039;myFrame&#039;&#039; als Komponente in andere Programme integrieren. Befehle wie &#039;&#039;JButton&#039;&#039; brauche ich in dem anderen Programm dann nicht zu schreiben.&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;main()&#039;&#039;-Methode in &#039;&#039;myProgram&#039;&#039; kann man in jede beliebige Klasse schreiben. So kann man sie auch direkt in &#039;&#039;myFrame&#039;&#039; schreiben:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  myFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das hat den enormen Vorteil, dass man in Java in mehreren Klassen &#039;&#039;main()&#039;&#039;-Methoden haben kann.&lt;br /&gt;
Man kann dann das Programm entweder von der eigentlichen Klasse aus starten oder aber auch einfach die &#039;&#039;main()&#039;&#039;-Methode in einer der Komponenten. In letzterem Fall hat man dann z.B. ein Programm, das nur die eine Komponente ausführt. Somit muss man nicht immer das ganze Programm starten, wenn man nur mal kurz Veränderungen an einer Komponente testen will.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Genauso wie wir nun &#039;&#039;myFrame&#039;&#039; erstellt haben, können wir auch eine Klasse namens &#039;&#039;RedButton&#039;&#039; erstellen, dessen Aufgabe es ist, einen roten Button zu erstellen:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle sieht man auch besser den Sinn der abgeleiteten Klassen. Nun wurden zwei &#039;&#039;JButton&#039;&#039;s direkt zu &#039;&#039;RedButton&#039;&#039;s. Wenn man bedenkt, dass sämtliche Swing-Komponenten wie &#039;&#039;JButton&#039;&#039; gezeichnet werden, so ist es eine erhebliche Arbeitserleichterung, dass das Programm dahinter nur einmal geschrieben wurde und dann immer wieder genutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Zu guter Letzt nun auch noch mal die Klasse &#039;&#039;RedButton&#039;&#039; in Kombination mit der Klasse &#039;&#039;myFrame&#039;&#039;:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  myFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5408</id>
		<title>Vererbung (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5408"/>
		<updated>2013-08-13T18:18:28Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im folgenden wird in anschaulicher Weise die Vererbung in Java, welches ein Teilbereich der Objektorientierung ist, beschrieben.&lt;br /&gt;
Alle Programme sehen, wenn man sie ausführt, genau gleich aus und bedienen sich auch gleich. Auch wenn der Quellcode immer wieder etwas anders ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fangen wir mit einem einfachen kleinen Programm an, das ein Fenster öffnet und drei Buttons erstellt. Zwei davon sind rot:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
      &lt;br /&gt;
                                          &lt;br /&gt;
            &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
            &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;new&amp;quot; wird ein neues Objekt (eine Instanz) erstellt, das eine Kopie des Hauptobjekts ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Betrachten wir uns nun &#039;&#039;JFrame&#039;&#039;. Man kann in Java eine neue Klasse erstellen (sofern die Klasse, von der sie sich ableitet, nicht &amp;quot;&#039;&#039;private&#039;&#039;&amp;quot; ist), die sämtliche Eigenschaften der Klasse, von der sie abgeleitet wurde, erbt.&lt;br /&gt;
&lt;br /&gt;
In folgendem Programm habe ich nun eine Klasse &#039;&#039;myFrame&#039;&#039; erstellt, die mittels &#039;&#039;extends&#039;&#039; von der Klasse &#039;&#039;JFrame&#039;&#039; alle Eigenschaften erbt:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
  myFrame(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
                                          &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Im Programm &#039;&#039;myProgram&#039;&#039; wird nun &#039;&#039;myFrame&#039;&#039; auch genau so genutzt und behandelt wie zuvor &#039;&#039;JFrame&#039;&#039;. Und das Ergebnis ist ebenfalls gleich.&lt;br /&gt;
In &#039;&#039;myProgram&#039;&#039; wird &#039;&#039;myFrame&#039;&#039; genau ein Argument übergeben: Der String &amp;quot;&#039;&#039;My Window&#039;&#039;&amp;quot;.&lt;br /&gt;
Die Anzahl und Art der Argumente muss im Konstruktor von der &#039;&#039;myFrame&#039;&#039;-Klasse auch vorkommen: &#039;&#039;myFrame(String name)&#039;&#039;.&lt;br /&gt;
Und damit dieses Argument wiederum auch an das eigentliche &#039;&#039;JFrame&#039;&#039; übergeben wird, steht dort &#039;&#039;super(name)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;myFrame&#039;&#039; ist ein neues Objekt. Ich kann ihm sämtliche Eigenschaften meines Programms geben:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  myFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Somit wird nun nur &#039;&#039;myFrame&#039;&#039; aufgerufen. In &#039;&#039;myFrame&#039;&#039; ist alles drin enthalten.&lt;br /&gt;
Man muss es wie eine Komponente sehen. Das Programmm sieht zwar beim Ausführen wieder genau gleich aus, aber vom Programmaufbau ist es nun etwas anders. Ich kann z.B. nun &#039;&#039;myFrame&#039;&#039; als Komponente in andere Programme integrieren. Befehle wie &#039;&#039;JButton&#039;&#039; brauche ich in dem anderen Programm dann nicht zu schreiben.&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;main()&#039;&#039;-Methode in &#039;&#039;myProgram&#039;&#039; kann man in jede beliebige Klasse schreiben. So kann man sie auch direkt in &#039;&#039;myFrame&#039;&#039; schreiben:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  myFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das hat den enormen Vorteil, dass man in Java in mehreren Klassen &#039;&#039;main()&#039;&#039;-Methoden haben kann.&lt;br /&gt;
Man kann dann das Programm entweder von der eigentlichen Klasse aus starten oder aber auch einfach die &#039;&#039;main()&#039;&#039;-Methode in einer der Komponenten. In letzterem Fall hat man dann z.B. ein Programm, das nur die eine Komponente ausführt. Somit muss man nicht immer das ganze Programm starten, wenn man nur mal kurz Veränderungen an einer Komponente testen will.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Genauso wie wir nun &#039;&#039;myFrame&#039;&#039; erstellt haben, können wir auch eine Klasse namens &#039;&#039;RedButton&#039;&#039; erstellen, dessen Aufgabe es ist, einen roten Button zu erstellen:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle sieht man auch besser den Sinn der abgeleiteten Klassen. Nun wurden zwei &#039;&#039;JButton&#039;&#039;s direkt zu &#039;&#039;RedButton&#039;&#039;s. Wenn man bedenkt, dass sämtliche Swing-Komponenten wie &#039;&#039;JButton&#039;&#039; gezeichnet werden, so ist es eine erhebliche Arbeitserleichterung, dass das Programm dahinter nur einmal geschrieben wurde und dann immer wieder genutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Zu guter Letzt nun auch noch mal die Klasse &#039;&#039;RedButton&#039;&#039; in Kombination mit der Klasse &#039;&#039;myFrame&#039;&#039;:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  myFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5407</id>
		<title>Vererbung (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5407"/>
		<updated>2013-08-13T17:35:27Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Programm 1&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
      &lt;br /&gt;
                                          &lt;br /&gt;
            &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
            &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programm 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
  myFrame(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
                                          &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programm 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  myFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programm 4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  myFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programm 5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programm 6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  myFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5406</id>
		<title>Vererbung (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Vererbung_(Java)&amp;diff=5406"/>
		<updated>2013-08-13T17:31:30Z</updated>

		<summary type="html">&lt;p&gt;Theuserbl: Erst mal nur das Grundgerüst meiner alten Beschreibung vom Januar 2010. Nur die Programmcodes sind momentan enthalten.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Programm 1&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:25em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
      &lt;br /&gt;
                                          &lt;br /&gt;
            &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
            &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:25em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programm 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:25em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
  myFrame(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
                                          &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:25em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programm 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:25em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  myFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:25em&amp;quot;|&amp;lt;code=java&amp;gt;public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programm 4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:25em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  myFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    b1.setBackground(new Color(255,0,0));&lt;br /&gt;
    b3.setBackground(new Color(255,0,0));&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:25em&amp;quot;|&amp;lt;code=java&amp;gt;     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programm 5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:25em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:25em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
&lt;br /&gt;
public class myProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programm 6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:25em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class RedButton extends JButton {&lt;br /&gt;
&lt;br /&gt;
  RedButton(String name) {&lt;br /&gt;
    super(name);&lt;br /&gt;
    this.setBackground(new Color(255,0,0));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:25em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
public class myFrame extends JFrame{&lt;br /&gt;
&lt;br /&gt;
  myFrame() {&lt;br /&gt;
    super(&amp;quot;My Window&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    RedButton b1 = new RedButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    RedButton b3 = new RedButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    this.add(p);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    myFrame f = new myFrame();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Theuserbl</name></author>
	</entry>
</feed>