Wątek przeniesiony 2015-05-13 10:51 z Java przez ŁF.

Mała biblioteczka przy pomocy super()

0

Witam

Mam w zasadzie takie niewielkie pytanie , ponieważ chce jak najkrócej napisać ten program wykorzystując super() , aczkolwiek nie jestem pewien czy jest to możliwe.
Jest tylko taka możliwość jak niżej czyli drukowanie w klasie głównej tytułu książki po uprzednim wywołaniu metody dziedziczonej z klasy nadrzędnej , każda pozycja w innej metodzie? Próbowałem umieścić 2 tytuły to w konstruktorze to w metodzie i niestety drukuje tylko jedną.

Czy radzicie bardziej pokombinować i skorzystać z tablicy Stringów . Co jest bardziej optymalne.

public class Ksiegozbior{

	public String autor;
	public String tytul;
	public String rodzaj;
	public String autor2;
	public String ntautor;
	public String nttit;
	public String ntkd;
	
	public Ksiegozbior(String au, String tyt, String rdz){
	
		this.autor = au;
		this.tytul = tyt;
		this.rodzaj = rdz;
	}
	
	public void FantasyTitles(String na,String nt,String nk){
		
		this.ntautor = na;
		this.nttit = nt;
		this.ntkd = nk;
	}
}


public class Fantastyka extends Ksiegozbior{

	
	
	public Fantastyka(){
	
	super("Gwiezdne Wojny Imperium Kontratakuje","Steven Spielberg","Fantasy");
	super.FantasyTitles("Lowca androidow","Steven Spielberg","Fantasy");
	
	
	}
	
	public void Fantasy(){
		super.FantasyTitles("AE Sztuczna Inteligencja ","Steven Spielberg","Fantasy");
	}
	
	public void Fantasy2(){
		super.FantasyTitles("I'm legend ","Steven Spielberg","Fantasy");
	}

	
}


public class Ksiazka extends Ksiegozbior{
	
	public static String autor2;
	
	public Ksiazka(){
	
		super("Adam Mickiewicz","Pan Tadeusz","Epopeja");
		
	}
}


public class Biblioteka{

	public static void main(String[] args){
		
	Ksiazka ks = new Ksiazka();
	System.out.print(ks.autor+"  "+ks.tytul+"  "+ks.rodzaj);
	Fantastyka ft = new Fantastyka();
	System.out.print("\n"+ft.ntautor+"  "+ft.nttit+"  "+ft.ntkd);
	ft.Fantasy();
	System.out.print("\n"+ft.ntautor+"  "+ft.nttit+"  "+ft.ntkd);
	ft.Fantasy2();
	System.out.print("\n"+ft.ntautor+"  "+ft.nttit+"  "+ft.ntkd);
	
	}
}
0
public class Ksiegozbior {

	public String autor;
	public String tytul;
	public String rodzaj;
	public String autor2;
	public String ntautor;
	public String nttit;
	public String ntkd;

	public Ksiegozbior(String au, String tyt, String rdz) {

		this.autor = au;
		this.tytul = tyt;
		this.rodzaj = rdz;
	}

	public void FantasyTitles(String na, String nt, String nk) {

		this.ntautor = na;
		this.nttit = nt;
		this.ntkd = nk;
	}

	@Override
	public String toString() {
		return autor + "  " + tytul + "  " + rodzaj;
	}
}

public class Fantastyka extends Ksiegozbior {

	public Fantastyka() {

		super("Gwiezdne Wojny Imperium Kontratakuje", "Steven Spielberg",
				"Fantasy");
		super.FantasyTitles("Lowca androidow", "Steven Spielberg", "Fantasy");

	}

	public void Fantasy() {
		super.FantasyTitles("AE Sztuczna Inteligencja ", "Steven Spielberg",
				"Fantasy");
	}

	public void Fantasy2() {
		super.FantasyTitles("I'm legend ", "Steven Spielberg", "Fantasy");
	}

	@Override
	public String toString() {
		return ntautor + "  " + nttit + "  " + ntkd;
	}
}

public class Biblioteka {

	public static void main(String[] args) {

		Ksiazka ks = new Ksiazka();
		System.out.println(ks);
		Fantastyka ft = new Fantastyka();
		System.out.println(ft);
		ft.Fantasy();
		System.out.println(ft);
		ft.Fantasy2();
		System.out.println(ft);

	}
}

O to Ci chodzi? Przemyśl czy rzeczywiście potrzebujesz po 2 zmienne na autora, tytuł, rodzaj

1

dwa powyższe posty to jakiś ponury żart :)
dlaczego klasa ma wpisane na sztywno np.: "Gwiezdne Wojny Imperium Kontratakuje", "Steven Spielberg", "Fantasy"?
Klasa powinna być szablonem, a to obiekt powinien wypełniać pola klasy
przemyśl wszystko jeszcze raz ale tym razem zapominając o tych "wypocinach" :)

0

Wstawiaj kod w znaczniki "kolorujące" składnię (< code=java>

 bez spacji!).
Przemyśl tez hierarchię dziedziczenia. Ten pomysł:
```java
public class Ksiazka extends Ksiegozbior{

to kuriozum.

1

Masz strasznie pogmatwaną tę swoją hierarchię: dlaczego książka dziedziczy po księgozbiorze?
To tak, jak gdyby auto miało dziedziczyć po parkingu - no nie ma bata.

Poza tym w jakim celu utworzyłeś metodę FantasyTitles? Co w ogóle ona robi?
Jej nazwa jest dosyć cudaczna i nie wskazuje na żadne specjalnie pożyteczne zastosowanie.

0

Chciałbym po prostu w jednej klasie zamieścić od 3-5 tytułów książek fantastycznych i tak kolejno dla każdego gatunku tytuł, autora i rodzaj książki

W moim rozumowaniu może jest ono dobre może nie klasy Fantastyka czy Książka dziedziczą po klasie Księgozbiór natomiast w klasie Biblioteka drukujemy wszystkie informacje. Chyba, że ktoś ma inny pomysł na te klasy .

Metoda FantasyTitles przekazuje identyfikatory potrzebne do wyświetlenia kolejnej książki fantastycznej

1

Nie, nie tędy droga.
Klasa Książka ma zawierać specyficzne dane o książce (autor, wydanie, liczba stron etc.), natomiast Księgozbiór może być w najprostszym wydaniu listą książek.

0

Ok, aczkolwiek jak najprościej wyświetlić np 5 przykładowych tytułów książek Fantastycznych czy też inny gatunek chodzi o więcej niż jeden rekord czy wykorzystać super() czy czy np zwracając zmienną imie w metodzie czy to kompletnie nie ta droga ?

0

Uparłeś się na super :)
Tak jak napisał @Patryk27

Księgozbiór może być w najprostszym wydaniu listą książek.

zrób sobie listę/tablicę książek w klasie Księgozbiór i w pętli wypisz tytuły, czy co tam Ci potrzebne (mógłbyś nawet pokusić się o CRUDa:))

for(Book book: books){
    System.out.println(book.getTitle());
}
0

Może tak

//klasa Ksiazka
public class Ksiazka
{
    String autor = "";
    String tytul = "";
    String rodzaj = "";

    public Ksiazka(String autor,String tytul,String rodzaj)
    {
        this .autor = autor;
        this.tytul = tytul;
        this.rodzaj = rodzaj;
    }
    
    public String toString()
    {
        return autor+" "+tytul+" "+rodzaj;
    }
}
//klasa Biblioteka
import java.util.*;
public class Biblioteka
{
    ArrayList<Ksiazka> ksiazki = new ArrayList<Ksiazka>();
    
    public static void main(String[] args)
    {
        new Biblioteka();
    }
    
    public Biblioteka()
    {
        ksiazki.add(new Ksiazka("Gwiezdne Wojny Imperium Kontratakuje","Steven Spielberg","Fantasy"));
        ksiazki.add(new Ksiazka("Lowca androidow","Steven Spielberg","Fantasy"));
        ksiazki.add(new Ksiazka("AE Sztuczna Inteligencja ","Steven Spielberg","Fantasy"));
        ksiazki.add(new Ksiazka("I'm legend ","Steven Spielberg","Fantasy"));
        ksiazki.add(new Ksiazka("Adam Mickiewicz","Pan Tadeusz","Epopeja"));
        listAll();
        list("Epopeja");
        list("Fantasy");
    }

    void listAll()
    {
        System.out.println("\nWszystkie ksiazki");
        for(Ksiazka ksiazka:ksiazki)
        {
            System.out.println(ksiazka);
        }
    }
    
    void list(String rodzaj)
    {
        System.out.println("\nKsiazki z dzialu "+rodzaj);
        for(Ksiazka ksiazka:ksiazki)
        {
            if(ksiazka.rodzaj.equalsIgnoreCase(rodzaj))
            {
                System.out.println(ksiazka);
            }
        }        
    }
        
}
0

A jak koniecznie musi być super(), to może tak:

public class Book{
    String author = "";
    String title = "";
    String genre ="";

    public Book(String author,String title){
        this.author = author;
        this.title = title;
    }
    
    public String toString(){
        return author+" "+title+" "+genre;
    }
}

public class Epos extends Book{
    public Epos(String author,String title){
        super(author,title);
        this.genre = "Epos";
    }
}

public class Fantasy extends Book{
    public Fantasy(String author,String title){
        super(author,title);
        this.genre = "Fantasy";
    }
}
import java.util.*;
public class Library{
    ArrayList<Book> books = new ArrayList<Book>();
    
    public static void main(String[] args){
        new Library();
    }
    
    public Library(){
        books.add(new Fantasy("Gwiezdne Wojny Imperium Kontratakuje","Steven Spielberg"));
        books.add(new Fantasy("Lowca androidow","Steven Spielberg"));
        books.add(new Fantasy("AE Sztuczna Inteligencja ","Steven Spielberg"));
        books.add(new Fantasy("I'm legend ","Steven Spielberg"));
        books.add(new Epos("Adam Mickiewicz","Pan Tadeusz"));
        listAll();
        list("Epos");
        list("Fantasy");
    }

    void listAll(){
        System.out.println("\nWszystkie ksiazki:");
        for(Book book:books){
            System.out.println(book);
        }
    }
    
    void list(String genre){
        System.out.println("\nKsiazki rodzaju "+genre+":");
        for(Book book:books){}
            if(book.genre.equalsIgnoreCase(genre)){
                System.out.println(book);
            }
        }        
    }
}

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