klasa abstrakcyjna

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 :[

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() {}
}
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 :]
}
}

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...

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

0

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

0

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

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

0

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

http://java.sun.com/j2se/1.4.2/docs/api/javax/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

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.

0

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

[browar]

0

Amen [browar]

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

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