java vererbung über mehrere dateien

wenn man mehrere klassen in einer .java datei definiert ist die erbung ja recht simpel mit dem schlüsselwort extends werden alle public deklarierten methoden und variablenn übergeben.
aber wie mache ich das wenn ich 2 klassen in jeweils einer datei definiere und von einer der beiden erbe ... beide klassen benötigen die gleichen variablen nur mit anderen werten und ich wollte nun die variablen einmal deklarieren und in beiden klassen verwenden.
nun wollte ich der variable in der geerbten klasse einfach einen neuen wert zuweisen und es kam eine fehlermeldung:
Code:
.\erbung.java:4: <identifier> expected
        m_name = "name";
              ^
.\erbung.java:4: cannot find symbol
symbol  : class m_name
location: class erbung
        m_name = "name";
        ^
2 errors
ich habe es auch mit super.variablenname versucht aber klappt auch nicht :/
was mache ich da falsch ?
 
Bisschen Code wäre fein - Kristallkugeln sind heutzutage eine Rarität ;)
Sonst:versuche public Getter und Setter Methoden zu definieren und diese zu nutzen
http://de.wikipedia.org/wiki/Zugriffsfunktion

Code:
public class Father
{

	private int myVar=0;

	public int getMyVar()
	{
		return myVar;
	}

	public void setMyVar(int myVar)
	{
		this.myVar = myVar;
	}
}

public class Mother
{

	private int myVar=0;

	public int getMyVar()
	{
		return myVar;
	}

	public void setMyVar(int myVar)
	{
		this.myVar = myVar;
	}
	
	
}

public class Child extends Mother
{

	int test()
	{
		return this.getMyVar();
	}
	
}
 
ja getter und setter ist aufjedenfall eine gute lösung ...
aber hier mal ein bisschen code (sorry):

Code:
Datei 1:

public class basis {

 String m_name;
 String m_vname;
 int alter;
 
 void mehtode1(){ ... }
 void methode2(){ ... }

}

Datei 2:

public class icherbe {

 // das hier klappt nicht 
 
 m_name = "name";
 
 // oder das hier 
 
 super.m_name = "name";
 
 // nur die methoden aufrufe funktionieren
 
 super.methode1();
 
}

beide dateien liegen im gleichen ordner also muss ich nichts mit "package" oder "import" machen (denk ich -.-)

ich hoffe jetzt wird das ein bisschen klarer :>

aber nochmal was anderes , wieso kann ich in einer datei nicht mehrere klassen "public" deklarieren ?
Code:
Dateiname: klasse2.java

public class klasse1 {

 ...
}

public class klasse2 {
	public static void main ( String[] args ) {} 
 
 
}

error:

Code:
klass2.java:1: class klasse1 is public, should be declared in a file named klasse1.java
public class CMitarbeiter {
 
Original von shinobo

ich hoffe jetzt wird das ein bisschen klarer :>
Nee, denn
Code:
Basis.java

public class Basis 
{
	 String m_name;
	 String m_vname;
	 int alter;
	 
	 void mehtode1(){ }
	 void methode2(){ }
}

Icherbe.java
public class Icherbe extends Basis
{
	public void test()
	{
	// das hier klappt
	 
	 m_name = "name";
	 
	 // oder das hier 
	 
	 super.m_name = "name";
	 
	 // nur die methoden aufrufe funktionieren
	}

}
wird anstandslos akzeptiert.

aber nochmal was anderes , wieso kann ich in einer datei nicht mehrere klassen "public" deklarieren ?
Weil es sprachlich so festgelegt wurde. Einer Theorie nach (außer einer besseren Gliederung des Programms) kann der Compiler so effizienter arbeiten, da er nicht alle Dateien nach enthaltenen Klassen durchsuchen muss sondern eine 1:1 Zuordnung hat.
Man kann zwar nur 1 Public Klasse pro Datei haben - aber mehrere private Klassen innendrin.
 
ja es wird problemlos kompiliert stimmt , da fehlt noch was :>

edit zu basis.java:

Code:
public class basis 
{
	 String m_name;
	 String m_vname;
	 int alter;
	 
	 void mehtode1(){ }
	 void methode2(){ }

             public static void main (String [] args) {
        
            basis x = new basis ();

            x.methode1();

            // Ab hier wirds kritisch

            icherbe y = new icherbe ();

            y.methode1();
  }
}

also sobald ich versuche eine instanz von "icherbe" zu erstellen rastet der compiler aus :/

und zu meiner zweiten frage, danke hat sich geklärt :)
 
Hallo shinobo,

kleiner Gedankengang von mir:

versuche es mal mit
Code:
this.icherbe y = new icherbe( )

this ist ein Zeiger.

Zudem bin ich etwas verwirrt, du erbst ja nur von Basis in die icherbe Klasse und nicht umgekehrt.

Vielleicht täusche ich mich ja, Java ist schon ein Stück her.

Grüße

Zephyros
 
mein problem ist das ich die variable irgendwo in der geerbten klasse verändern wollte , das klappt nicht ...

aber in dem konstruktor oder in einer methode (so wie cdw es gepostet hat sorry habe da was übersehen ..) ist es kein problem die geerbten variablen anzusprechen :>
jetzt muss ich nur mal gucken ob es in java soetwas wie struct in c++ gibt weil ich eigentlich nur eigenschaften übergeben möchte.
 
Zurück
Oben