Klasa "rodzica"

0

Od niedawna zacząłem "zabawę" w javie i już znalazłem nurtujący mnie problem. Otóż chciałbym stworzyć super-klasę, która po odziedziczeniu pozwala na wykonanie konkretnej metody dla wszystkich pod-klas równocześnie. Nie potrafię, chyba tego lepiej wyjaśnić. Oto przykładowy kod:

class Sprite{
 float x, y;

 Sprite(){
  //cos tam
 }

 public draw(){
  //rysuje
 }
} //koniec Sprite

class sImage extends Sprite{
 sImage(){
  super();
  x = random.nextInt(100);
 }
}

I gdy mam kilka Image, to metodę draw() wykonuje jedną linijką. Coś w stylu Sprite.draw();. W Delphi mi się udawało.

0

Możesz w Sprite dodać statyczne pole(jakąś kolekcję) do którego będziesz wrzucał tworzone obiekty. Potem jednym wywołaniem funkcji będziesz mógł na nich wszystkich działać.

0

Chyba rozumiem, ale mógłbyś jeszcze podać mi jakiś prosty przykład?

1
public class Sprite
{
    private static List<Sprite> sprites = new ArrayList<Sprite>();
    
    public static void foo()
    {
        for(Sprite s : sprites)
        {
            System.out.println(s.toString());
        }
    }
    
    public Sprite()
    {
        sprites.add(this);
    }

    @Override
    public String toString()
    {
        return "Sprite";
    }
}
public class Sprite2 extends Sprite
{

    @Override
    public String toString()
    {
        return "Sprite2";
    }
}
public class Main
{
    public static void main(String[] args)
    {
        Sprite s1 = new Sprite();
        Sprite s2 = new Sprite2();
        Sprite.foo();
    }
}
2

Żegnaj pamięci RAM :) To jest akurat przykład jak szybko i skutecznie doprowadzić do wycieku pamięci. Zawsze każdy obiekt będzie miał choć jedną "twardą" referencję w postaci referencji w liście.

Zamiast używać listy obiektów Sprite należy użyć listy tzw. słabych referencji (WeakREferences):

public class Sprite{
    private static List<WeakReference<Sprite>> sprites = new LinkedList<WeakReference<Sprite>>();
 
    public static void foo(){
        for(WeakReference<Sprite> s : sprites){
            if(s.get()!=null)
            System.out.println(s.get().toString());
        }
    }
 
    public Sprite(){
        sprites.add(new WeakReference(this));
    }
 
    @Override
    public String toString(){
        return "Sprite";
    }
}
0

Dzięki :D

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