Inhaltsverzeichnis:
Video: Erste eigene Klasse - Objektorientierte Programmierung in Java Teil 2 ● Gehe auf SIMPLECLUB.DE/GO 2024
Wenn eine Java-Klasse nicht defekt ist, reparieren Sie sie nicht. Angenommen, Sie möchten einer vorhandenen Java-Klasse Funktionalität hinzufügen. Sie mögen die Activity-Klasse von Android, aber die vordefinierte Activity-Klasse zeigt nichts auf dem Bildschirm an. Schreibst du die Activity-Klasse von Android neu?
Anstatt eine bestehende Klasse neu zu schreiben, erweitern Sie die Klasse. Selbst in einer do-nothing Android "Hallo" -Anwendung schreiben Sie
public class MyActivity erweitert Activity
Dann schreiben Sie in der Deklaration der MyActivity-Klasse
@Override public void onCreate (Bundle gespeicherterInstanzStatus) {super. onCreate (gespeicherterInstanzStatus); setContentView (R. layout. main);}
Ihre MyActivity-Klasse erstellt neue Funktionen, indem die meisten Aktivitäten von Android erweitert werden, während die hirntote onCreate-Methode der Activity-Klasse überschrieben wird.
Die letzten Klassen von Java
Bei der objektorientierten Programmierung ist das Erweitern einer Klasse das edelste, was Sie tun können.
Einige Klassen sollen jedoch nicht erweitert werden. Nehmen wir zum Beispiel die String-Klasse von Java. Ein String ist ein String ist ein String. Sie wollen nicht jemandes MyString. length-Methode, um die Länge der Zeit zurückzugeben, die benötigt wird, um die Zeichen einer Zeichenkette zu verschlüsseln. Um zu verhindern, dass jemand mit den String-Methoden etwas Unerwartetes, Unkonventionelles oder Ungewöhnliches tut, haben die Entwickler von Java die String-Klasse finalisiert:
public final class String
Einige der vordeklarierten Klassen von Android sind ebenfalls final, einschließlich der Telefonie- und MediaStore-Klassen.
Abstrakte Klassen in Java
So wie eine letzte Klasse nicht erweitert werden kann, besteht eine abstrakte Klasse darauf, erweitert zu werden. Android ViewGroup ist ein Beispiel für eine abstrakte Klasse.
public abstract class Ansichtsgruppe {public void bringChildToFront (Untergeordnete Ansicht) {int index = indexOfChild (untergeordnet); if (Index> = 0) {removeFromArray (Index); addInArray (untergeordnetes Element, mChildrenCount); Kind. mParent = this;}} protected abstract void onLayout (boolesch geändert, int l, int t, int r, int b);}
Android-ViewGroup. Java-Datei ist mehr als 3, 700 Zeilen lang. Dieses Beispiel hat also nur einen winzigen Bruchteil des Dateicodes. Aber Sie können sehen, wie eine Klasse abstrakt wird. Zu keiner Überraschung überrascht das Wort abstract das Wort class. Aber das Wort abstract startet auch die Deklaration einiger Methoden, die zur Klasse gehören.
Die Gründer von Android haben entschieden, dass die Idee einer ViewGroup nützlich ist. Sie waren korrekt, weil Ihre bevorzugten Android-Layouts (LinearLayout, RelativeLayout usw.) Unterklassen von ViewGroup sind.Sie haben auch verstanden, dass sich eine Funktion von einer Art von ViewGroup zu einer anderen nicht ändert. Beispielsweise definiert das obige Beispiel eine Methode bringChildToFront, und Unterklassen von ViewGroup erben diese Methode.
Aber die Gründer erkannten auch, dass einige Aspekte einer ViewGroup keinen Sinn machen, wenn Sie nicht mit einer bestimmten Gruppe arbeiten. Zum Beispiel positioniert ein LinearLayout Dinge nacheinander, und ein RelativeLayout positioniert Dinge über, unter und nebeneinander. Der obige Code hat also keine ausgewachsene onLayout-Methode.
Die onLayout-Deklaration hat keinen Methodentext. Android benötigt jedoch jede Unterklasse der ViewGroup-Klasse, um ihre eigene onLayout-Methode zu deklarieren. Java erzwingt diese Anforderung, wenn Sie die Methode onLayout als abstrakt deklarieren.
Als Entwickler können Sie kein Objekt aus einer abstrakten Klasse erstellen. Wenn Sie
schreiben ViewGroup group = new ViewGroup ();
Java sagt dir, dass du dich schlecht benimmst. Um etwas für die ViewGroup-Klasse zu tun, benötigen Sie eine Unterklasse der ViewGroup-Klasse. Die Unterklasse verfügt über eine konkrete Version jeder abstrakten Methode in der ViewGroup-Klasse:
package com. allmycode. Proben; Import Android. Inhalt. Kontext; Import Android. Aussicht. Ansichtsgruppe; public class MyLayout erweitert ViewGroup {public MyLayout (Kontextkontext) {super (context);} @Override protected void onLayout (boolesch geändert, int l, int t, int r, int b);}}