paint(Graphics g) ile razy?

0

Witam

  1. Ile może być klas używających metody paint(Graphics g) {} Jeśli wiele, jak jej użyć odwołując się do innej klasy?

  2. Ile JPaneli może zostać dołączonych do JFrame?

  3. Jak w klasie XYZ użyć zmiennej z klasy głównej?

Pozdrawiam :)

0
  1. Nieskończoność. Tu pewnie chodzi ci o paint(Graphics) przesłonięte z java.awt.Container - jej chyba nie powinno się wywoływać bezpośrednio.
  2. Ile pamięci starczy
  3. Tak jak w klasie głównej, o ile pole nie jest prywatne.
0
  1. dodam tylko, że jeżeli klasa XYZ nie jest klasą wewnętrzną klasy głównej, a zmienna, której chcesz użyć, nie jest statyczna, 'konieczne' (znajdzie się często wiele sposobów obejścia tego, ale w ten sposób najłatwiej to przeprowadzić) będzie przekazanie klasie XYZ referencji klasy głównej.
0

Witam. Dziękuję za odpowiedzi

Jak przekazać referencje klasy głównej?

Chodzi o to 'extends' ?

Pozdrawiam

0

W konstruktorze klasy XYZ, wywoływane przy tworzeniu z klasy głównej (tutaj A) przez np. XYZ obiektKlasyXYZ = new XYZ(this);

class A {
    int a = 5;
}

class XYZ {
    A obiekt;

    public XYZ (A obiekt) {
        this.obiekt = obiekt;
    }

    void jakasMetoda () {
        System.out.println(obiekt.a); //da Output: 5
    }
}
0

Z tym, że tutaj XYZ nie dziedziczy po A.

Co do 3. jeśli masz np.:

public A {
    public int cos;
}
// ...
public B extends A { // B dziedziczy po A
    public void wypiszCos() {
        System.out.println(cos); // wypisanie int cos z klasy bazowej
    }
}

tutaj problemu nie ma.
Jeśli jednak klasa dziedzicząca nadpisuje jakieś pole tą samą nazwą:

public C extends A {
    public int cos;
    public void wypiszCosZC() {
        System.out.println(cos); // wypisanie int cos z klasy C
    }
    public void wypiszCosZA() {
        System.out.println(super.cos); // wypisanie int cos z klasy A
    }
}

musimy, jak widać na przykładzie, użyć słowa kluczowego super (taka referencja do klasy bazowej). To samo jest z metodami.

A a = new A();
B b = new B();
C c = new C();
c.cos = 666;
b.wypiszCos(); // wypisze 0;
c.wypiszCosZA(); // wypisze 0;
c.wypiszCosZC(); // wypisze 666;

Dopiero teraz do mnie dotarło: mówiąc "klasa główna", masz na myśli dziedziczenie, klasę z metodą główną, czy jeszcze coś innego?

0

@up:
zgadza się, ja tylko odpisywałem na pytanie 'Jak przekazać referencje klasy głównej?'.
Zauważmy jednak, że przy takim schemacie, jak podałes (przy dziedziczeniu), klasa B (która extenduje po A) ma tylko jakby 'model klasy A', a nie 'aktualne wartości zmiennych konkretnego, istniejącego obiektu typu A', myślę więc, że o to chodziło dudeskiemu (o możliwość manipulacji zmiennymi istniejącego obiektu klasy A z poziomu innego obiektu klasy B).

0

Ma aktualne wartości zmiennych konkretnego, istniejącego obiektu typu A, który budowany jest razem z obiektem B i zawierany w B ;d

0

oj tam ;), wiesz o co chodzi ;) (mowa o ewentualnych 'przyszłych' zmianach w wartościach zmiennych obiektu A, następujących po stworzeniu obiektu B, wtedy dziedziczenie już nie wystarczy - bo dziedziczenie klasy to jedno, ale przyszłe 'życie' dwóch obiektów, które nie jest już zależne od drugiego, to co innego ;) ).
Śmię twierdzić, że dudeskiemu nie chodziło obiekt zawierany w B ;D

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