Mit rontok el az örökléseknél? - Error: java: non-static variable this cannot be referenced from a static context -
import java.util.Scanner;
/**
* Created by Zsámboki Norbert on 2014.10.16..
*/
public class Haromszog { // magassag nem lehet nagyobb mint b
double a, b, c, magassag;
public void kerulet() {
System.out.println("Az alakzat kerülete: " + (a + b + c));
}
public void terulet() {
System.out.println("Az alakzat területe: " + (a * magassag / 2));
}
public class egyenloOldaluHaromszog extends Haromszog {
double b = a;
double c = a;
}
public class egyenloSzaruHaromszog extends Haromszog {
double c = b;
}
public class derekszoguHaromszog extends Haromszog {
double magassag = b;
}
public static void main(String[] args) {
Scanner be = new Scanner(System.in);
System.out.println("Kérem a háromszög \"a\" oldalának hosszát: ");
double a = be.nextDouble();
System.out.println("Kérem a háromszög \"b\" oldalának hosszát: ");
double b = be.nextDouble();
System.out.println("Kérem a háromszög \"c\" oldalának hosszát: ");
double c = be.nextDouble();
System.out.println("Kérem a háromszög magasságát: ");
double magassag = be.nextDouble();
System.out.println("Ezek közül a háromszögek közül választhatsz: ");
System.out.println("Nyomj egy 1-est ha általános háromszögről van szó");
System.out.println("Nyomj egy 2-est ha egyenlő oldalú háromszögről van szó");
System.out.println("Nyomj egy 3-est ha egyenlőszárú háromszögről van szó");
System.out.println("Nyomj egy 4-est ha derékszögű háromszögről van szó");
int menu = be.nextInt();
switch (menu) {
case 1:
Haromszog hSzog = new Haromszog();
hSzog.a = a;
hSzog.b = b;
hSzog.c = c;
hSzog.magassag = magassag;
hSzog.kerulet();
hSzog.terulet();
break;
case 2:
egyenloOldaluHaromszog eOHszog = new egyenloOldaluHaromszog();
eOHszog.a = a;
eOHszog.b = b;
eOHszog.c = c;
eOHszog.magassag = magassag;
eOHszog.kerulet();
eOHszog.terulet();
break;
case 3:
egyenloSzaruHaromszog eSzHszog = new egyenloSzaruHaromszog();
eSzHszog.a = a;
eSzHszog.b = b;
eSzHszog.c = c;
eSzHszog.magassag = magassag;
eSzHszog.kerulet();
eSzHszog.terulet();
break;
case 4:
derekszoguHaromszog dHszog = new derekszoguHaromszog();
dHszog.a = a;
dHszog.b = b;
dHszog.c = c;
dHszog.magassag = magassag;
dHszog.kerulet();
dHszog.terulet();
break;
}
}
}
"public class egyenloOldaluHaromszog extends Haromszog {
double b = a;
double c = a;
} "
Ilyeneket szerintem nem lehet csinálni.
Amúgy az egész programod fura nekem...
Én így csinálnám:
- adjon meg 3 oldalt és a program döntse el, miylen háromszög (bár minek?)
VAGY
- adja meg milyen típusú háromszög és ennek függvényében az oldalait
+ olvass utána a konstruktoroknak, én abban állítanám be az oldalakat, illetve protected-é/private-á tenném az adattagokat. (Egyébként konstruktorban lehetne olyanokat csinálni, amiket szeretnél: c=a, stb. Bár ha ekkor nem ismeri még az oldalakat, akkor semmi értelme...)
A magyarázat pedig valami ilyesmi:
Osztály szinten (static) próbálsz objektumszintű (nem static) adatokat beállítani.
Ez a rengeteg katyvasz amit ide írtál egyszerűen borzalmas. Nézz meg egy másik példakódot, olvass utána, de ez így semmi, nulla. Az öröklést egyáltalán nem is használod, pedig lenne rá lehetőséged.
Attól tartok kicsit előreszaladtál a tanagyagban. Lépj vissza az alapokhoz. A konstruktorok sem mennek.
"Ez aztán kielégítő válasz volt. Érdemes volt végigolvasnod. Gratulálok!"
Mégis milyen választ vársz? A kód amit írtál, baromság ahogy van. Látszik, hogy az osztály/objektum fogalmával sem vagy tisztában és az objektum orientált programozás alapelveiről ne is beszéljünk. Az öröklődéstől - mint téma - baromi messze állsz.
Akármilyen könyvből kezdtél tanulni, ugorj vissza az elejére és ne hagyd ki a bevezető elméletet. (nyilván nem fogunk itt az alapoktól megtanítani programozni)
Ha java-ban egy osztályba másikat teszel az azt jelenti, hogy ahhoz objektumhoz fognak tartozni az osztály példányai. Szóval a Haromszog osztálynak egy példányához tartozhatnak Egyenlooldalu, Egyenloszaru, stb. háromszögek. Amit szerettél volna, az vagy egy statikus osztály az osztályon belül, vagy kívül egy-egy osztály. Ja és használj konstruktort, mert te csak letakartad a leszármazott háromszögben az ős adatmezőit.
pastebin.com
/
fB4Xf76L
Hol volt itt kész kód?
hihetetlen mennyi troll van itt is...
További kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!