Zugriff auf andere Packages

usrr

Bekanntes Mitglied
Hallo,

wollte mal eben etwas Ordnung in meinem Projekt schaffen, weil es so langsam immer mehr Klassen werden. Klassen zur gleichen Thematik habe ich in eigene Unterordner (Packages?) verschoben. Leider habe ich trotz der Move-Funktion der IDE jetzt keinen Zugriff mehr auf die Klassen.

Struktur:

src
Core
KlasseMitMainMethode
Utils
KlasseUtil


Wie komme ich aus der KlasseMitMainMethode an Klassen aus Utils ran? Die IDE schlägt folgendes vor, was aber nicht funktioniert:

Utils.KlasseUtil
 
Die Unterverzeichnisse müssen in src sein und diese "Unterverzeichnisse" also Packages müssen auch in der Klasse deklariert sein...

Aber normalerweise müsste die IDE das richtig machen...
 
Ich sehe gerade, dass mein Beitrag falsch formatiert wurde. Alles ist im src folder drin.

Number.class
Java:
package NumberClass;

public abstract class Number {

    Number( ) {
        super();
        fromString("0");
    }

    Number( String value ) {
        super();
        fromString(value);
    }

    @Override
    abstract public String toString();
    abstract public void fromString(String value);
    abstract public Number add(Number number);
}

NumberDouble.class
Java:
package NumberClass;

import java.lang.*;

public class NumberDouble extends Number {

    private double value;

    public NumberDouble() {
        super("0");
    }

    public NumberDouble(String value) {
        super(value);
    }

    public NumberDouble(double value) {
        super();
        this.value = value;
    }

    @Override
    public String toString() {
        return String.valueOf(this.value);
    }

    @Override
    public void fromString(String value) {
        this.value = Double.valueOf(value);
    }

    @Override
    public Number add(Number number) {
        return new NumberDouble(this.value + ((NumberDouble)number).value);
    }

}

UseThisNumber.class
Java:
package NumberClass;

public class UseThisNumber extends NumberDouble {

    UseThisNumber() {
        super();
    }

    UseThisNumber(String value) {
        super(value);
    }

}

Test.class
Java:
package NumberExample;

import NumberClass.UseThisNumber;

public class Test {

    public static void main(String[] args) {

        Number p = new UseThisNumber();

    }
}

Probleme macht """Number p = new UseThisNumber();""" in der main-Methode. Laut Fehlermeldung wäre es nicht public. Aber ist es doch.
 
Hey, probier´s mal so:

Klasse Test:
Java:
package NumberExample;
 
import NumberClass.UseThisNumber;
 
public class Test
{
	static UseThisNumber number;
    public static void main(String[] args)
    {
 
        number = new UseThisNumber();
 
    }
}

und bei Klasse UseThisNumber:

Java:
package NumberClass;
 
public class UseThisNumber extends NumberDouble {
 
    public UseThisNumber() {
        super();
    }
 
    UseThisNumber(String value) {
        super(value);
    }
 
}

sollte klappen!

Liebe Grüße
 
Vielleicht weil diese Klasse [c]public abstract class Number {[/c] abstract ist und sie nicht instanzierbar ist?
 
Ja das klappt schon mal. Aber warum? Und was wenn ich keine statische Variable gebrauchen kann?

Edit:

Sind ja beides statische Variable, macht also keinen Unterschied.

Trotzdem, warum kann ich die Klasse nicht lokal in der main() benutzen?
 
Zuletzt bearbeitet:
Der Konstruktor:

Java:
    UseThisNumber() {
        super();
    }

Hat keinen Zugriffsmodifikator (public, private) und ist daher Package-Private. D.h. er kann von überall innerhalb seines eigenen Packages aufgerufen werden, aber nicht von einem anderen Package aus.

Package-Private ist immer der Default-Zugriffsmodifikator. Vorher hattest du keine Probleme, da die Class ja noch im selben Package lag.
 
Ja, aus irgend einem grund, dachte ich, dass Konstruktoren immer public sind. Aber trotzdem, warum kann ich die Klassse nicht lokal in main() benutzen?
 

Neue Themen


Zurück
Oben