Wątek przeniesiony 2016-06-13 20:21 z Java przez bogdans.

Klasa abstrakcyjna.

0

Witam, uczę sie programowania w Javie od niedawna i proszę o pomoc.
Mam błąd w linijce Ref lek1 = new Ref("Paski Accu Check Active",42, 0);
Nie wiem jak mam wywołać cene refundowaną 42 to zwykła cena zrobiłem funkcje Refundacja która oblicza mi ta cene lecz nie potrafię jej wywalić na ekran.
Pozdrawiam


public class Leki {
	String nazwa;

	Leki(String nazwa){
		this.nazwa = nazwa;

	}
	public class Ref extends Leki{
		double cena;
		double znizka;
		Ref(String nazwa, double cena, double znizka) {
			super(nazwa);
			this.cena = cena;
			this.znizka = znizka;

		}

	void refundacja()
	{
		znizka = cena * 0.7;
	}
	void pokazInformacje(){
		System.out.println(nazwa);
		System.out.println(cena);
		System.out.println(znizka);
	}
	
	}
	
	public static void main(String[] args) {
		
	Ref lek1 = new Ref("Paski Accu Check Active",42, 0);
	lek1.pokazInformacje();
	lek1.refundacja();
	}

}

0

Po co ci ta klasa zagnieżdżona?

0

Ale z czym dokładnie masz problem?

lek1.pokazInformacje(); // pokazuje ci informacje, ktore wprowadziles jako argumenty
lek1.refundacja(); // oblicze znizke

Jak chcesz dostać info ile wynosi zniżka to umieść metode "pokazInformacje()" po "refundacja()"

1

Problem jest z kompilacją: dopisz w deklaracji klasy Ref słówko static.

0

No serio zabrakło mi 1 słowka static żeby zaliczyc kolokwium haha ;p dzięki za odp

0

@jakub40 Ref niepotrzebnie jest klasą zagnieżdżoną, gdybyś zrobił ją jako normalną, to nie potrzebowałbyś static.

0

Polecenie było stwórz abstrakcyjna klasę dlatego musiała być zagnieżdżona, chyba że się mylę.
Czy ten kod jest waszym zdaniem już poprawny? Jeżeli chodzi o składnie klasy abstrakcyjnej.

public abstract class Leki {
	String nazwa;

	Leki(String nazwa){
		this.nazwa = nazwa;

	}
	public static class Ref extends Leki{
		double cena;
		double znizka;
		Ref(String nazwa, double cena) {
			super(nazwa);
			this.cena = cena;

		}

	void refundacja()
	{
		znizka = cena * 0.7;

	}
	void pokazInformacje(){
		System.out.println(nazwa);
		System.out.println("Cena 100%: " + cena + " zł");
		System.out.println("Cena po refundacji: " + znizka + " zł");
	}
	
	}
	
	public static void main(String[] args) {
		
	Ref lek1 = new Ref("Paski Accu Check Active",42);
	lek1.refundacja();
	lek1.pokazInformacje();
	
	Ref lek2 = new Ref("Prezerwatywy durex",55);
	lek2.refundacja();
	lek2.pokazInformacje();

	}

}
0

Polecenie było stwórz abstrakcyjna klasę dlatego musiała być zagnieżdżona

Mylisz się, jedno z drugim nie ma nic wspólnego.

Ten kod który pokazałeś to jest WTF tygodnia a nie poprawny kod. Chyba że potrafisz wyjaśnić w jakim celu masz tam tą zagnieżdżoną klasę, chętnie poslucham.

1

Nie, te dwa koncepty są ze sobą niezwiązane, tak jak pisał Shalom. Także umieść obie klasy w osobnych plikach, usuwając przy tym oczywiście słowo static z definicji klasy Ref. Trzy dodatkowe sprawy:

  1. Metoda refundacja jest zła, z takiego powodu, że przez nią możesz mieć obiekt nie w pełni zinicjalizowany. To znaczy jeśli nie wywołasz metody refundacja, to obiekt będzie niby typu Ref, ale pole znizka będzie miało wartość 0.0 (domyślna dla niezinicjalizowanego double). Wyrzuć tą metodę i trzymaj wszystko związane z inicjalizacją w konstruktorze.
  2. Nazwa klasy Leki zmień na liczbę pojedynczą, w końcu ten typ reprezentuje jeden lek.
  3. W programowaniu wszystkie nazwy klas, zmiennych, metod itd. nazywamy po angiesku. Chociaż domyślam się, że na uczelnię wymagali po polsku ;)

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