Erste Schritte extends vererbung

kill_dmp

Aktives Mitglied
hi all

ich habe einen frage zur vererbung
ich habe eine klasse Personal erstellt
wenn ich jetzt eine klasse Mitarbeiter erstellen und sie erben lasse von personal
solte ich doch auf einen int wert zugreifen können oder ?
ich will den int wert nicht static machen

Klasse Personal
int hallo = 1

klasse Mitarbeiter extends Persoal
(keine werte)

klasse Test
psvm
mitarbeiter mitarbeiter = new mitarbeiter()
sysout("wie ist der wert von"+Mitarbeiter.hallo)
 
Ja (solange beide Klassen im selben package liegen, schließlich hat hallo die Sichtbarkeit package protected)

PS: die Groß- und Kleinschreibungsfehler in den beiden Zeilen
Java:
mitarbeiter mitarbeiter = new mitarbeiter()
sysout("wie ist der wert von"+Mitarbeiter.hallo)
liegen wahrscheinlich nur daran das du Pseudocode gepostet hast. Richtig müssen die natürlich heissen
Java:
Mitarbeiter mitarbeiter = new Mitarbeiter()
sysout("wie ist der wert von"+mitarbeiter.hallo)
 
Zuletzt bearbeitet:
sry die frage ist da schon an sich blöd
aber i wie bekomme ich es hien das bei sysout immer ein fehler ist
Java:
public class  Personal {
     protected int erfarung = 0;
     protected int vital = 1;
     protected int gewantheit = 1;
     protected int interligenz = 1;
     protected int erscheinung = 1;
     protected int level = 1;
     protected int aktionswert = level * (vital + gewantheit + interligenz + erscheinung);
     protected int erfolgreich =(int) (Math.random()* level) *level ;
     protected int rang = erfolgreich * level;
     protected int versagt = (int) Math.random()* 100 / level; 
     protected String job = "Nix könner";
     
     void LevelUp(){
        if (erfarung > 99){
            erfarung = 0;
            level = level++;
            vital++;
            gewantheit++;
            interligenz++;
            erscheinung++;
        }
     }
}

Java:
public class Nutte extends Personal{
    
  
}

Java:
public class Test {
Nutte Nutte = new Nutte(); 
    public static void main(String[] args) {
        System.out.println("aw ist "+Nutte.aktionswert);


         
   }
}
 
weil Test wahrscheinlich nicht auf aktionswert zugreifen kann... die nutte selbst kann es
 
test ist im paket und solte zugreifen können
die console sagt immer
Code:
run:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - non-static variable Nutte cannot be referenced from a static context
	at Test.main(Test.java:9)
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)
ich hatte eingendlich nicht vor in den klassen static zu benutzen da die werte sich später noch ändern sollen (per get und set)
 
Schreib mal deine Variable "Nutte" besser klein und mach sie static.

Ansonsten compilerfehler bei google eingeben. Typischer Anfänger Fehler.
 
ok den namen habe ich schon mal klein
aber wenn ich sie static mache kann ich nur 1 mal einen wert übergeben und dann kann ich es nicht mehr ändern und das ich schlecht bei einen objekt was sich ändert.

der wert von aktionswert ändert sich ja mit level und fähigkeiten
 
Hi,
wenn eine Variable static ist, hat sie für die komplette Klasse Gültigkeit und nicht nur für ein bestimmtes Objekt. Was du meinst, dass eine variable nur einmal initialisiert werden kann, ist das Schlüsselwort "final".

Ich bin mir da zwar zu 100% sicher, sollte ich dennoch falsch liegen, möge man mich korrigieren 😉

lg
 
wenn ich
Java:
protected static int aktionswert = level * (vital + gewantheit + interligenz + erscheinung);
bekomme ich wieder einen compiler fehler aber diesmal in personal der fehler in test ist auch noch da

Code:
run:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - non-static variable nutte cannot be referenced from a static context
	at Test.main(Test.java:9)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)
 
Static bedeutet, dass du eine Methode(wenn du sie denn static definiert hast) ausführen kannst, ohne zuvor ein Objekt erzeugt zu haben.

Die Fehlermeldung sagt dir doch schon, dass deine Variable "nutte" nicht static ist und du daher keine Referenz erzeugen kannst.

Weshalb möchtest du denn überhaupt die Variablen static deklarieren? Gibt in meinen Augen keinen Sinn.. mach es lieber:

Java:
protected final int AKTIONSWERT= level * (vital + gewantheit + interligenz + erscheinung);

oder deklarier deine Variable "nutte" static..
 
erlich gesagt kommt grade nur bahnhof an
die klasse personal soll ja nicht benutz werden (als objekt), ich habe die eigendlich als bauplan gedach um mir schreibarbeit ab zu nehmen

personal soll ein level system zu verfügung stellen für nutte, schläger und co.
das was in personal steht soll 1zu1 auch in den vererbten klassen zur verfügung stehen

des weiteren muss ich mit der main klasse drauf zugreifen können und ausgegeben können gegeben falls auch verändern
 
Was meinst du mit "ein Level zur Verfügung stellen" ?
...

Das ist der Sinn von Vererbung, dass das dann zur Verfügung steht.

Wo liegt dein Problem jetzt noch?
Wie sieht deine main-Klasse denn jetzt aus?
 
Du schriebst ja du seist Legastheniker. Deshalb hier ein Verbesserungsvorschlag bei der Variablenbenennung.

Statt

Java:
public class  Personal {
     protected int erfarung = 0;
...
     protected int gewantheit = 1;
     protected int interligenz = 1;

Java:
public class  Personal {
     protected int erfahrung = 0;
...
     protected int gewandtheit = 1;
     protected int intelligenz = 1;
 
zur zeit ist es noch test meine main klasse, mit sysout worüber ich erst testen wolte den wert in der console auszugeben
und später alles in einer liste
und danach mit mit swing eine oberfläche erstellen

das level system soll so aussehen ich erhöhe von der main aus den wert von erfahrung und personal solte automatich levelup ausführen sobalt die bedrinung erfüllt ist. das habe ich bis jetzt noch nicht erstellt bis auf die methode.

wie man ja schon mit bekommt bin ich der absolute n00b in der vererbung


so ich werde das hier auch beenden ich werde mich glaube ich besser wieder die nase in die bücher stecken, die schicken mir keine pm 🙂 :rtfm:
 
Zuletzt bearbeitet:

Zurück
Oben