Klassen Mit fremder Klasse auf public Methode zugreifen

GMS

Mitglied
Hallo
Ich hätte eine Frage:
Ich wollt mit einer Klasse (nicht Unterklasse) auf eine Methode zugreifen.
Mit einer Subklasse würde dass ja so gehen:
Java:
public class main{
    protected int x;
    protected main(){
    }
    public void chanche_x(int z){
        x=z;
        System.out.println("x ist jetzt "+x+".");
    }
}

Java:
public class sub{
    private main objekt;

public sub(main objekt){
       this.objekt = objekt;
}
protected void chanche_x(int z){
  objekt.chanche_x(z);
}
public void chanche_x_via_variable(int z){
    objekt.x=z;
    System.out.println("x ist jetzt "+objekt.x+".");
}
}

Aber wie kann man dies ohne dass die zugreifende Klasse eine Subklasse ist tun
Hier wäre mein Ansatz aber es fehlt die Verknüpfung zur main Klasse
Java:
public class other{
    public other(){
    }
    public void chanche(int z){
        .chanche_x(z);
    }
}

Weiss jemand wie ich die Methode aus der other klasse mit der der main klasse verknüpfe?
Vielen Dank
MfG
GMS
 
Hab jetzt mal weitergedacht:
Java:
public class other{
    public other(){
    }
    public void chanche(main objekt, int z){
        this.objekt=objekt;
        objekt.chanche_x(z);
    }
}

Meine idee war dass beim aufrufen nun angegebn wird welche klasse gemeint ist.
Beim compilen tritt jedoch der Fehler auf :
cannot find symbol - variable objekt

Und es muss doch statt main objekt doch eingegebn werden können ob es ein objekt der main klasse ist oder bezieht sich die methode immer nur auf EINE klasse?
 
Zuletzt bearbeitet:
Deine sub-Klasse ist keine echt Subklasse. Subklasse würde das hier bedeuten:
Java:
public class sub extends main

Du hast stattdessen eine Klasse, welche main referenziert.


In deinem 2. Post ist this.objekt = other.objekt und other.objekt existiert nicht.
 
@GMS
Java:
public class Access
{

    public static void main(String[] args)
    {
        int a = 23;
        int b = 29;

        /** Eine Instanz der Klasse muss erzeugt werden */
        NotFinalClass notFinalClass = new NotFinalClass();
        int c = notFinalClass.min(a, b);
        System.out.println("Minium: " + c);
    
        /** Keine Instanz der Klasse muss erzeugt werden */
        int d = FinalClass.min(a, b);
        System.out.println("Minium: " + d);

    }

}
/** Konsolenausgabe */
Minium: 23
Minium: 23
Java:
public class NotFinalClass
{

    public int min(int a, int b)
    {
        return (a <= b) ? a : b;
    }
}
Java:
public final class FinalClass
{

    public static int min(int a, int b)
    {
        return (a <= b) ? a : b;
    }
}
Eigene Klassen schreiben
Durchsuche doch die IDE deiner Wahl nach Klassen wie Math und schau nach, wie diese aufgebaut ist und welche Operationen diese bietet.
 
Deine sub-Klasse ist keine echt Subklasse. Subklasse würde das hier bedeuten:
Java:
public class sub extends main

Du hast stattdessen eine Klasse, welche main referenziert.


In deinem 2. Post ist this.objekt = other.objekt und other.objekt existiert nicht.
Ja und meine Frage war ob es möglich ist in der einer benutzereingabe in der other klasse erst vom benutzer wählen zu lassen auf welche klasse sich referenziert wird
 
Du hast also beispielhaft zwei Klasse A und B die beide eine Methode haben change(int x) um einen int-Wert zu verändern.
Beim Aufruf einer anderen Methode möchtest du dann einen Wert mitgeben der verändert werden soll und entweder ein Objekt A oder B welche den Wert verändern?
Klingt nach Interfaces...
 
Am besten den Wert vom benutzer eingeben lassen deswegen ja auch int z bei der methode von OTHER und danach z beim aufrufen der von MAIN
 
Zuletzt bearbeitet:
Moin,

mal so nebenbei: ist es wirklich schlau, eine eigene Klasse genauso wie ein Java-Schlüsselwort zu benennen ?? 😉

VG Klaus
 
Hab jetzt mal weitergedacht:
Java:
public class other{
    public other(){
    }
    public void chanche(main objekt, int z){
        this.objekt=objekt;
        objekt.chanche_x(z);
    }
}

Meine idee war dass beim aufrufen nun angegebn wird welche klasse gemeint ist.
Beim compilen tritt jedoch der Fehler auf :
cannot find symbol - variable objekt

Und es muss doch statt main objekt doch eingegebn werden können ob es ein objekt der main klasse ist oder bezieht sich die methode immer nur auf EINE klasse?

Irgendwie kann ich dir nur schwer folgen, was du eigentlich vorhast. Vielleicht wäre es sinnvoll das mal zu kurz zu beschreiben, dann kann man dir bestimmt besser helfen. Ansonsten solltest du wirklich die Namensgebung deiner Klassen noch mal überdenken, wie Vfl_Freak schon geschrieben hat.

Edit: Zum Fehler von oben ein: Deine Klasse "other" enthält keine Variable "objekt", der du etwas zuweisen könntest, deshalb "cannot find symbol".

Du könntest natürlich auch folgendes machen:
Java:
    public void chanche(main objekt, int z){
       objekt.chanche_x(z);
    }
Aber irgendwie ist das sinnlos, weil du dafür keine Methode in einer anderen Klasse brauchst.
 
Zuletzt bearbeitet:
Meine idee war:
Eine Klasse erstellen, welche eine Methode hat die:
-auf eine Methode einer anderen Klasse zugreifen kann
-auswählen kann auf welche klasse sie referiert
 
Irgendwie kann ich dir nur schwer folgen, was du eigentlich vorhast. Vielleicht wäre es sinnvoll das mal zu kurz zu beschreiben, dann kann man dir bestimmt besser helfen. Ansonsten solltest du wirklich die Namensgebung deiner Klassen noch mal überdenken, wie Vfl_Freak schon geschrieben hat.

Edit: Zum Fehler von oben ein: Deine Klasse "other" enthält keine Variable "objekt", der du etwas zuweisen könntest, deshalb "cannot find symbol".

Du könntest natürlich auch folgendes machen:
Java:
    public void chanche(main objekt, int z){
       objekt.chanche_x(z);
    }
Aber irgendwie ist das sinnlos, weil du dafür keine Methode in einer anderen Klasse brauchst.
Zu meinem Fehler dass ist mir bewusst nur wenn man objekt als objekt variable deklariren will muss man ja den identifier angeben der in dem fall doch die Klasse ist auf die sich die ganze Klasse bezieht
 
Eine Klasse erstellen, welche eine Methode hat die:
-auf eine Methode einer anderen Klasse zugreifen kann
Erzeige einfach ein Objekt der anderen Klasse ... dann kanst Du doch auf die (public!!)-Methoden zu greifen !!

Hier mal leicht abstrahiert:
Java:
public class A 
{
     public A();
     public integer methodeA()
    {
          // ...
          return irgendeinInteger;
    }
}
// -------------------------
public class b 
{
     public b();

     A objA = new A();
     integer myValue = A.methodeA(); 
}

VG Klaus
 
Er
Erzeige einfach ein Objekt der anderen Klasse ... dann kanst Du doch auf die (public!!)-Methoden zu greifen !!

Hier mal leicht abstrahiert:
Java:
public class A
{
     public A();
     public integer methodeA()
    {
          // ...
          return irgendeinInteger;
    }
}
// -------------------------
public class b
{
     public b();

     A objA = new A();
     integer myValue = A.methodeA();
}

VG Klaus
Erstmal vielen Dank

Ich hab noch ne frage zu dem integer weil ich will das ganze ja auch verstehen 🙂
Was genau machst du in der methode methodeA ()? Und ich wollte des ja so umsetzten dass falls man 2 klassen zb A und A' hat und die Klasse B hat und dann von der Klasse B auf A oder A' zugreifen will soll dass ja auswählbar bzw veränderbar sein. Ist das möglich? Und mit deinem Vorschlag kann man es doch nicht oder überseh ich da was?
 
falls man 2 klassen zb A und A' hat und die Klasse B hat und dann von der Klasse B auf A oder A' zugreifen will soll dass ja auswählbar bzw veränderbar sein. Ist das möglich? Und mit deinem Vorschlag kann man es doch nicht oder überseh ich da was?
Das klingt, als ob du tatsächlich nach Interfaces suchst:

Java:
// Ein Interface legt fest, welche Methoden vorhanden sein müssen OHNE sie selbst
// zu implementieren
public interface Changeable {
   void change(int value);
}

// Diese Klasse implementiert das Interface, d.h. sie muss die vom Interface geforderte
// Methode "change" implementieren.
class A implements Changeable {
   private int myValue;

   @override
   public void change(int value) {
      myValue = value;
   }
}

// dito wie A
class B implements Changeable {
   private int myValue;

   @override
   public void change(int value) {
      myValue = value;
   }
}

class C {
   // Der Parameter ist vom Typ des Interfaces, d.h. alles was hier übergeben wird
   // muss die Methode "change" haben, die du dann auch aufrufen kannst.
   public void doSomething(Changeable c) { // an diese Methode kannst du alles übergeben, was Changeable implementiert...
      c.change(17);
   }
}

// irgendwo in der main:
Changeable a = new A();
Changeable b = new B();

C c = new C();
c.doSomething(a); // ruft intern a.change(17) auf
c.doSomething(b); // ruft intern b.change(17) auf
 
Zuletzt bearbeitet:
Das klingt, als ob du tatsächlich nach Interfaces suchst:

Java:
public interface Changeable {
   void change(int value);
}

class A implements Changeable {
   private int myValue;

   @override
   public void change(int value) {
      myValue = value;
   }
}

class B implements Changeable {
   private int myValue;

   @override
   public void change(int value) {
      myValue = value;
   }
}

class C {
   public void doSomething(Changeable c) { // an diese Methode kannst du alles übergeben, was Changeable implementiert...
      c.change(17);
   }
}

// irgendwo in der main:
Changeable a = new A();
Changeable b = new B();

C c = new C();
c.doSomething(a); // ruft intern a.change(17) auf
c.doSomething(b); // ruft intern b.change(17) auf
Leider versteh ich hier nur bahnhof....
Hab noch nie von interfaces im zussamnhang mit java gehört
 

Zurück
Oben