verständnisfrage extends

Z

zauber3r

Erfahrenes Mitglied
23
hi,

wie ihr mitbekommen habt, bin ich brutaler anfänger, aber gewillt zu lernen.

ich bin jetzt bei "extends".

man erbt von der genannten klasse eigenschaften.

sprich MainActivity erbt von Activity
die nächste Klasse ZweiteActivity erbt doch dann von MainActivity und die dritte Klasse DritteActivity von der zweiten oder verstehe ich das falsch?

ich habe gelesen man erbt auch variablen?! ist das richtig?

warum musse ich dann von activity von activity variablen übergeben wenn ich sie doch erbe?

vllt dumme fragen, aber nach recherche beantworten die sie erstmal nicht.

danke
 
Sry, aber ich kapier dein Beispiel nicht. Vielleicht kannst du das sauberer formulieren?
z.b.
Klasse B erbt von Klasse A
Klasse C erbt von Klasse B

Ansonsten müsste dir das hier weiterhelfen:
Link
 
zauber3r schrieb:
hi,
sprich MainActivity erbt von Activity
die nächste Klasse ZweiteActivity erbt doch dann von MainActivity und die dritte Klasse DritteActivity von der zweiten oder verstehe ich das falsch?
Wenn du folgendes geschreiben hast, dann ja:
MainActivity extends Activity
ZweiteActivity extends MainActivity
DritteActivity extends ZweiteActivity

Nur dann erben die Klassen voneinander wie du es beschrieben hast. Wenn du einfach mehrere Activitys in der App verwendest, ohne diese mit extends voneinander abzuleiten, erben sie nicht voneinander.

ich habe gelesen man erbt auch variablen?! ist das richtig?
Das ist richtig.

warum musse ich dann von activity von activity variablen übergeben wenn ich sie doch erbe?
Bist du sicher, dass deine Activitys voneinander erben? Das wäre doch schon sehr ungewöhnlich. Ich denke eher deine Activitys erben alle von Activity oder selbst definierten Subklasse von Activity.
Aber selbst wenn sie tatsächlich voneinander erben würden, hieße das nicht, dass sie auf die gleichen Daten zugreifen. Du musst unterscheiden zwischen der Klasse und der Instanz einer Klasse. Vielleicht kannst du es dir so besser vorstellen: Ein Autohersteller hat einen Bauplan für ein Auto. Basierend auf diesem Bauplan werden tausende Autos gebaut. Der Bauplan ist die Klasse und die Autos sind die Instanzen der Klasse. Wenn du in deinem Auto einen Gang einlegst wird er nur in deinem Auto eingelegt und nicht in allen Autos des gleichen Typs.
 
Zuletzt bearbeitet:
stehe immernoch auf dem schlauch, auch das tut hilft mir 0 weiter....

Zweite Activity erbt von MainActivity.

Was erbt sie denn genau? Variablen?
Warum übergebe ich dann Variablen per Hand mit Bundle etc.?

Meine MainActivity macht in meinem Programm nur eines, letztendlich ein Login (per mysql/php/etc).

die zweite Activity soll nur ne Spinnerauswahl machen und den loginnamen aus der Mainactivity bekommen und die beiden Sachen an die dritte Activity übergeben.
 
Sie erbt alle Variablen und Methoden.

Du hast das Objektorientierte Programmieren nicht verstanden.

Nur weil du ein Objekt von der Super- und der Subklasse erstellt hast, heißt das noch lange nicht, dass sie gegenseitig auf ihre Variablen zugreifen können (Zumindest solange sie nicht static sind ^^).
 
Erstmal sei gesagt, dass es nicht sehr sinnvoll ist zwei Activitys die jeweils eine konkrete Aufgabe haben voneinander erben zu lassen. Am besten lässt du jede Activity die du verwendest von Activity erben.

Zu deiner eigentlichen Frage:
Ich habe bevor ich deine Antwort gesehen habe meinen vorherigen Beitrag nochmal editiert und ein Beispiel eingefügt. Vielleicht hilft dir das weiter.
 
Vllt solltest du erstmal mit Java / Programmier Grundlagen anfangen bevor du iwas mit Android probierst....

lg. Dagobert
 
Du erbst die Dinge, die in der Superklasse als public oder protected gekennzeichnet sind (und je nach Situation auch solche ohne Modifier).

Aber dein eigentliches Verständnisproblem liegt wohl nicht direkt bei der Vererbung, sondern beim Verständnis, wie und wann man auf Variablen einer anderen Klasse zugreifen kann. Wenn eine Klasse von einer anderen erbt, haben nicht alle Variablen von der Subklasse automatisch die gleichen Werte wie die Variablen der Superklasse. Sie haben einfach den gleichen Namen.

Beispiel:
Code:
class KlasseA {
    public String test;
}

class KlasseB extends KlasseA{
}

KlasseB erbt jetzt einen String namens test, aber nicht den Inhalt von test aus KlasseA:

Code:
KlasseA instanzA = new KlasseA();
KlasseB instanzB = new KlasseB();

instanzA.test = "Hallo"
//instanzB.test hat NICHT den Wert "Hallo"
 
Danke für eure Hilfe. Auch wenn der Weg schwieriger oder unsinniger erscheint direkt mit Android Java an zu fangen und nicht im kleinen mit Java mache ich es trotzdem so. Ist zwar vllt anstrengender aber für mich trotzdem der bessere Weg. Ich komme aus einem anderen Bereich und bin absolut kein progger, deshalb ist es umso schwieriger aber ich mache schon Fortschritte
 
Ne, der Weg ist sicherlich nicht schwieriger sondern einfacher und unsinniger. Try&Error ist ein bekanntes Vorgehensmodell und hat auch seine Vorteile.

Es ist deutlich schwieriger und anstrengender sich Tage und Wochenlang erst mit den Grundlagen zu beschäftigen bevor man das macht was man eigentlich machen wollte.

Hingegen einfach ausprobieren bis es klappt ist der viel einfachere Weg.

Was einen schneller an sein Ziel bringt muss jeder für sich entscheiden.
 
  • Danke
Reaktionen: meganeura
Ironie oder meinst du das ernst?
 
Ok, grad gesehen das du die guten Ratschläge dich mit den Grundlagen zu beschäftigen in den anderen Threads auch schon ignoriert hast und hier selbst bei den Grundlagen eine Abkürzung suchst, bin ich hier raus.
 
Gastuser schrieb:
Hingegen einfach ausprobieren bis es klappt ist der viel einfachere Weg.

Und das führt das meisten dazu, dass das "fertige" Stück Software zwar irgendwie funktioniert, der Entwickler aber selbst nicht genau weiß warum und es im schlimmsten Fall riesige Sicherheitslücken gibt.

;)
 
  • Danke
Reaktionen: ui_3k1
Hey, ich möchte dir deine Frage möglichst einfach zu erklären versuchen.

extends bietet sich immer an, wenn reine Eigenschaften (damit meine ich KEINE Werte [Zahlen, Worte, Daten, etc]) weitervermittelt werden sollen.
Da das auch sehr abstrakt ist, ein einfaches Beispiel, was gerne auch in Büchern genommen wird, um die Sache zu erklären:

Du hast eine Klasse Auto. Diese Klasse gibt feste Vorgaben (denk an einen Bauplan oder an ein Datenblatt) an, wie ein Auto "beschaffen" sein muss, also welche Eigenschaftes es haben soll.

An dieser Stelle denke daran, dass die Klasse Auto Objekte mit besagten Eigenschaften erstellen kann. Hinweis auf new-Operator.

Wenn du nun ein ähnliches Objekt erschaffen willst, das aber kein Auto ist, weil es zB ein paar ergänzende Eigenschaften aufweisen soll, macht Vererbung dahin gehend Sinn, dass man sich an dem Bauplan von Auto "bedient" und auf Basis dieser Struktur weitere Eigenschaften definiert.
Hier wäre eine Kindklasse Cabrio denkbar.
Tipp: kannst dir ja mal überlegen was an einem Cabrio anders ist und warum es streng genommen kein Cabrio mehr ist, wenn es ausschließlich die Eigenschaften von Auto hat. ;)

Die Sache ist definitiv nicht schwierig - aber ich weiß, dass es für jemand, der gerade den Einstieg in die Programmierung macht, oft verwirrend ist.

Zu deiner Aussage "try & error" -> bitte lass dir sagen, dass es einfach keinen Sinn macht so vorzugehen. Hier will dir niemand etwas Böses oder sich in irgendeiner Form aufspielen. Ich dachte auch sehr lange, dass diese Art des Lernens zielführend sei... Aber es stimmt einfach nicht, deutlich ausgedrückt ist es BULLSHIT.
Wenn du weiter auf deiner Meinung beharrst, akzeptiere ich das natürlich aber wie schon von den anderen beschrieben, zum Ziel führt es, wenn überhaupt, nur nach extremsten Unwegen, die Nerven und vor allem Zeit kosten.
Wie gesagt, ich wollte es auch lange nicht glauben und dazu kommt, dass ich die dumme Eigenschaft habe selbst meine Erfahrungen machen zu müssen. Heute würde ich sagen, ich habe viele Stunden meiner kostbaren Programmier-Zeit mir selbst im Weg gestanden.

Daher ist auch meine Empfehlung: Sorgfältigst einlesen und dann deine "Steh-wieder-auf"-Mentalität nutzen, um bei einem Problem am Ball zu bleiben.

Und damit du meinen Worten etwas glauben schenken kannst, will ich dir auch hier ein kleines Beispiel geben:
Ich habe mit C++ angefangen und bin später zu Java gekommen.
Wenn man in C++ den Inhalt eines Strings vergleicht geht das so
Code:
if(string1 == string2){
}
in Java läuft die Abfrage über string1.equals(string2). Mit obiger Schreibweise vergleicht man in Java lediglich die Referenzen der Variablen... (wenn dir das jetzt spanisch vorkommt, am besten mal recherchieren, ist nicht ganz unwichtig diese Logik zu verstehen)

Mit try & error kannst du Wochen nach dieser Art von Fehlern suchen und deine Zeit ist komplett verplämpert. Alternative: man eigenet sich den Umgang mit dem Debugger an und springt mit ihm bis zum Fehler um der Sache auf den Grund zugehen <- aufwänding, aber führt zum Ziel.
Alternative 2: Man liest im Vorfeld einfach ordentlich nach und lernt dabei noch viele andere sinnvolle Sachen. <- gerade am Anfang hat man die Chance wirklich viel "mitzunehmen"...

Beste Grüße
 
meganeura schrieb:
Bist du sicher, dass deine Activitys voneinander erben? Das wäre doch schon sehr ungewöhnlich.

Ja macht er, siehe seine Klasse hier:
https://www.android-hilfe.de/forum/...nullpointerexception.590893.html#post-7867611

Da er dort explizit die Superklasse aufruft, fliegt ihm das Ding um die Ohren... Warum er das aufruft weiß er nicht bzw. wird er einfach so irgendwo irgendwas zusammenkopiert haben ... und zu googlen, so wie ich es ihm DORT schon angeraten habe, scheint er nicht für nötig zu erachten ... Copy&Paste wird schon irgendwie klappen und zu ner App führen ...
 
Direkt mit Androidprogrammierung anzufangen ohne vorher die einfachsten Javagrundlagen zu verstehen kann nicht gut gehen. Auch wenn du das durch try and error dann doch irgendwann verstehen solltest. Lang geht das nicht mehr gut, wenn man nicht mal die einfachsten Dinge versteht und sich nur was zusammenkopiert. Und ja, das obige war mit so ziemlicher Sicherheit ironisch gemeint. ^^
Du würdest dir selber auch einen Gefallen tun, wenn du zuerst oder zumindest nebenbei noch das ein oder andere Java(e)book liest. Braucht zwar auch etwas Zeit, aber diese holst du später wieder locker rein, weil du dann nicht zu jedem kleinen Bestandteil von Android nachgoogeln musst, wie dies und das funktioniert.
 
extends heißt übersetzt erweitern. Und genau das machst du, eine vorhandene Klasse (Program) erweitern. Spricht man nimmt eine vorhandene Klasse und erweitert sie (bzw passt sie seinen Bedürfnissen an).

Das spart einen eine ganze Ecke Arbeit, man braucht etwas nur einmal programmieren und kann es immer wieder verwenden.

Ein weiterer Vorteil ist, das alle erweiterte (extends) Klassen den gleichen Datentyp wie die Basisklasse haben. Das erlaubt erlaubt dann die Sachen, die Zoopa erklärt.

Das erklärt man auch gerne mit Vererbung.

Die Idee selber stammt aus der Mengenlehre, daher kommen auch die seltsamen Begriffe wie Klasse, Set usw. Das alles ist also viel älter als die Informatik. Ich bin mir fast sicher, dass diesen Teil der Grundlagen die wenigsten hier kennen. ;)

Und bevor du von den Antworten verschreckt aufgibst, einfach weiter mache, Sachen ausprobieren, und wenn man etwas nicht versteht Fragen stellen und Antworten suchen.
 

Ähnliche Themen

lordzwieback
  • lordzwieback
Antworten
0
Aufrufe
712
lordzwieback
lordzwieback
deka
Antworten
0
Aufrufe
918
deka
deka
P
Antworten
13
Aufrufe
3.514
Patpa
P
Zurück
Oben Unten