wywołanie metody statycznej.

0

Witam,

mam klasę A w której jest statyczne pole aaa, oraz statyczna metoda zmien().

class A{

private static aaa;

public static void zmien(){};

Teraz gdy w klasie B, mam utworzony obiekt typu klasy A i chcę wywołać dla tego obiektu metodę zmien to normalnie robię to tak:

class B{

public static void main()
{

A ob1 = new A();

ob1.zmien();

}

i teraz mój problem polega na tym, żę kompilator podpowiada mi, żebym wywołał to tak:

A.zmien();

dlaczego?

0

Bo to jest metoda statyczna.
Zawsze jest wywoływana na rzecz klasy (nie obiektu), można wywołać niby na rzecz obiektu ale i tak zostanie wywołana na rzecz klasy.
Składowe statyczne są trzymane tak samo na rzecz klasy (nie obiektu), czyli dla wszystkich obiektów tej klasy ta składowa jest ta sama.
Istnieje nawet wtedy gdy nie istnieje żaden obiekt tej klasy.

0

Rozwinę poprzednią wypowiedź: statyczne metody nie mogą niczego implementować ani być przeciążane, tzn mechanizm dziedziczenia nie działa w przypadku metod statycznych. Wywoływanie metod klasowych niby na rzecz obiektu (po skompilowaniu obj.metodaStatyczna() i tak wyjdzie kod typu: Klasa.metodaStatyczna()) może zaciemnić kod, popatrz na przykład na to:

interface I {

    void przywitajSie();
}

class A implements I {

    public void przywitajSie() {
        System.out.println("Tu klasa A.");
    }

    public static void przywitajSieStatic() {
        System.out.println("Tu klasa A.");
    }
}

class B extends A {

    @Override
    public void przywitajSie() {
        System.out.println("Tu klasa B.");
    }

    public static void przywitajSieStatic() {
        System.out.println("Tu klasa B.");
    }
}

public class Main {

    void run() {
        A a = new A();
        a.przywitajSie();
        a.przywitajSieStatic();
        a = new B();
        a.przywitajSie();
        a.przywitajSieStatic();
    }

    public static void main(String[] args) {
        new Main().run();
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1