klasa abstrakcyjna

Odpowiedz Nowy wątek
2005-07-21 16:19
axiomat
0

Mam stworzyc klase abstrakcyjna. Pisze wiec:

abstract class test
{
static int iZmienna;
test()
{
iZmienna=0;
}
}

Teraz w main, jako ze nie moge tworzyc obiektu klasy abstrakcyjnej to robie tak:

test.iZmienna=3;

I dostaje przy kompilacji blad:
inner classes cannot have static declarations

wyglada na to ze nie moge miec pol statycznych wiec zmieniam w swojej klasie:

abstract class test
{
int iZmienna; //juz bez static
test()
{
iZmienna=0;
}
}

i w trakcie kompilacji dostaje:
non-static variable iZmienna cannot be referenced from a static context

Czy moze ktos mi wytlumaczyc jak to powinno wygladac? Bo ja juz nie wiem :[

Pozostało 580 znaków

2005-07-21 16:31
0

W klasach abstrakcyjnych NIE MOŻESZ zapisać ciała funkcji, sam nagłówek i deklaracje zmiennych. To co chcesz osiągnąć (chyba, bo nie wiem do czego dążysz) można tak:

abstract class test
{
   int iZmienna = 0;
   test() {}
}

Pozostało 580 znaków

2005-07-22 10:03
Axiomat
0

okazalo sie ze problem jest dosc prosty do rozwiazania. klasa abstrakcyjna musi byc zdefinowana poza klasa glowna programu (a ja mialem to jako czesc klasy glownej (obok main)
Czyli powinno byc np tak:

abstract class test
{
static public int iZmienna=0;
test () {}
public static boolean funkcja (String strCiag) {} //tu jakas przykladowa metoda
}

public class glowna {
public static void main(String[] args) {
test.funkcja("napis"); //i uzywanie tego w ten sposob :]
}
}

Pozostało 580 znaków

2005-07-22 10:16
0

Co do ciał metod w klasach abstrakcyjnych: klasy abstrakcyjne MOGĄ mieć metody z ciałami. Nie mogą mieć ciała tylko metody oznaczone jako abstrakcyjne. Czyli prawidłowy jest kod:

<b>public </b><b>abstract </b><b>class </b>Sample {
  <b>public </b><b>void </b>test() {
    // ciało metody
  }
}

i nieprawidłowy jest kod:

<b>public abstract class </b>Sample {
  <b>public abstract void </b>test() {
    // ciało metody
  }
}

Pozdrawiam...

Pozostało 580 znaków

2009-03-27 00:20
Kalessin
0

że się wtrącę...

abstract class test
{
test()
}

jest niepoprawne z definicji... test jest konstruktorem (ta sama nazwa co klasa), a abstrakcyjne klasy nie są wykorzystywane do tworzenia obiektów, więc konstruktory nie są tym samym wywoływane... zmień nazwę ;) musi też chyba być wszystko co najmniej "protected" lub "public" bo klasa abstrakcyjna jest z definicji dziedziczona

Pozostało 580 znaków

2009-03-27 07:38
qwe
0

Może chłopaka już robaki gryzą a Ty go jeszcze męczysz... Nekrofil.

Pozostało 580 znaków

2009-03-27 12:52
Kalessin
0

Nie lubię sztywnych, wolę ciepłe i miękkie ;P

Spojrzałem na datę posta już po wysłaniu odpowiedzi ;)

Pozostało 580 znaków

2009-03-27 22:04
Zbanowany
0

Głupoty panowie piszecie i nikt na to nie reaguje, jeden przykład:

http://java.sun.com/j2se/1.4.[...]avax/imageio/ImageReader.html

Każda klasa ma konstruktor, jak nie sprecyzowany to domyślny, klasa abstrakcyjna różni się tym od innych (m.in) że nie można stworzyć bezpośrednio instancji takiej klasy, natomiast przy tworzeniu obiektu klasy z niej wywiedzionej konstruktor klasy domyślnej jest wywoływany.

public abstract class Abstract {
    Abstract() {
        System.out.println("Konstruktor klasy Abstract");
    }
    public static void main(String[] args) {
        NoAbstract na = new NoAbstract();
    }

}

class NoAbstract extends Abstract {
    NoAbstract() {
        System.out.println("Konstruktor klasy NoAbstract");
    }
}

Pozdrawiam

Pozostało 580 znaków

2009-03-27 22:45
Kalessin
0

Jeśli nawet klasa abstrakcyjna ma konstruktor, to po kiego on? Obiekt tej klasy nigdy nie powstanie, a jak dziedziczymy ją i tak konstruktory trzeba pisać od nowa... Gdy tworzymy obiekt klasy dziedziczącej z abstrakcyjnej to i tak konstruktor zostanie wywołany z tej potomnej.

Pozostało 580 znaków

2009-03-27 22:53
Zbanowany
0

Klasa ImageReader pokazuje ze jednak na cos się przydaje.
Pozatym jak już pisać o teorii to pisać zgodnie z stanem faktycznym, to wszystko.

[browar]

Pozostało 580 znaków

2009-03-28 07:35
Kalessin
0

Amen [browar]

Dzięki za sprostowanie, zawsze więcej wiedzy się przyda ;]

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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