Gå til innhold

hvordan bruke abstrakt medtode?


Anbefalte innlegg

Jeg skal lage en abstract klasse som skal retunere en bestemt verdi om noen ting. F. eks så har jeg to dyr som er truet. Jeg må lege en abstrakt metode for å hente ut hvor truet de dyrene er. Jeg har flere typer dyr også, men de to dyrene her er like truet. Jeg vet ikke helt hvordan jeg skal angripe dette...

 

Forløplig har jeg gjort slik, men jeg vet ikke om jeg har angrepet det riktig.

public abstract class Endangered extends ZooAnimal
{
private String panda;
private String kenguru;

{
 System.out.print("Panda er EN - endangered: " + panda +
          " (" + kenguru + " mins)");
}
}

Lenke til kommentar
Videoannonse
Annonse

Hvorfor er "Endangered" klassen abstrakt og hvorfor arver den fra ZooAnimal? Hvilken subklasser tenkte du at denne skulle ha? + Det er ingen logisk arv fra ZooAnimal til Endangered, er du ikke enig? ZooAnimal bør isåfall ha et atributt som het endangered..

 

Uansett, her er eksempel på bruk av abstrakt klasse:

public abstract class Animal {
 protected String name;
 public String getName() { return name; }
 public abstract String getDescription();
}

public class Panda extends Animal {
 public String getDescription() { return "Panda is a nice animal.."; }
}

Lenke til kommentar

Endangerd skal være en subklasse av ZooAnimal. Den skal være superklassen til truete dyr og være abstrakt. Det står spesifisert i oppgave heftet mitt. Jeg står litt fast, er ikke akkurat den beste på dette feltet.

 

Eksempel på klassen til et truet dyr


public class Panda extends ZooAnimal
{
   
   
   public Panda()
   {
       super();
   }
   
   public Panda (String name, int age, String desc) {
       super(name, desc, age);
   }

  
   public String toString() {
       String returnString = getName() + " (Panda)\n";
       returnString += super.toString();
       return returnString;
   }

}

Endret av lizza-krissa
Lenke til kommentar

her er ZooAnimal.

 


public class ZooAnimal
{
   
   private String name;
   private String origin;   // hvor kom dyret opprinnelig fra, sted, land eller kontinent?
   private String description;
   private int age; 
   private String food;  // hva spiser dyret
   private Sex sex; // hvilket kjønn har dyret
   private String panda;  
   private String kenguru;  


   protected ZooAnimal() {
       name = null;
       origin = null;
       description = null;
       age = 0;
       sex = Sex.UNKNOWN;
   }
   
   protected ZooAnimal(String name, String desc, int age) {
       this.name = name.trim();
       this.age = age;
       description = desc.trim();
       origin = null;
       sex = Sex.UNKNOWN;
   }
   
   public void setName(String name)
   {
       this.name = name.trim();
   }    

   public String getName() {
       return name;
   }
  
   public void setAge (int age) {
       if (age >= 0) {
           this.age = age;
       }
   }
   
   public int getAge (int age) {
       return age;
   }
   
   public void setDescription ( String desc) {
       description = desc.trim();
   }
   
   public String getDescription() {
       return description;
   }
  
   public  void setOrigin(String o) {
       origin = o.trim();
   }
   
   public  String getOrigin() {
       return origin;
   }
   
   public void setFood(String food) {
       this.food = food.trim();
   }

   public String getFood() {
       return food;
   }
  
   public Sex getSex() {
       return sex;
   }
  
    public String toString() 
    {
        
      String returnString = "\tAlder: " + age + "\n";
      if (sex != Sex.UNKNOWN)
         returnString += "\tKjønn: " + sex + "\n";
      if (food != null ) 
           returnString += "\t Spiser: " + food + "\n";
      if (getDescription() != null)
           returnString += "\tBeskrivelse: " + description + "\n";
      if (getOrigin() != null)
           returnString += "\tKommer opprinnelig fra: " + origin + "\n";
      return returnString;
   }
}

 

Edit, liten feil...

Endret av lizza-krissa
Lenke til kommentar

Tja, for meg virker det direkte feil at Endangered arver fra ZooAnimal; de har _veldig_ lite til felles.

 

Muligens at EndangeredAnimal kan gå, slik at diverse truede dyr arver fra denne igjen, men blir ikke helt riktig det heller. Men hvis oppgaven sier det så.. (vranglære etter min mening.. ;) )

Lenke til kommentar

Nå tror jeg at jeg har det... Her er Endangered klassen min.

 

public abstract class Endangered extends ZooAnimal
{
   public Endangered()
   {
       super();
   }
   
   public Endangered(String name, String desc, int age)
   {
       super(name, desc, age);
   }
   
   public abstract Threatlevel getThreatlevel();
}

 

også lager jeg en ny klasse for graden.

 

Men hvordan skal jeg avslutte de for at de skal bli rett? Tror den første skal være riktig nå, men får ikke til den klassen under helt.

 

public enum Threatlevel
{
   // Her er de forskjellige typene av truete dyr, CR, EN og VU, også legger vi inn verdiene bak.
   CR("Critically endagered!"),EN("Endagered!"),VU("Vulnerable!");
   
   private String print;
   
   Threatlevel(String value) {
       print = value;
   }
   
   //skrive ut tekstrenger ved tostring metoden
   
   public String toString() {

Lenke til kommentar

Her blir vel threat level retunert fra panda klassen, det er vel ikke helt slik det skal være i følge beskrivelsen av det den skal gjøre. Hvis ikke jeg ikke tar feil.

 

Jeg skal implimentere en klasse som heter threat som skal være subklasse av ZooAnimal og superklassen til truete dyr.

Lenke til kommentar
Jeg skal implimentere en klasse som heter threat som skal være subklasse av ZooAnimal og superklassen til truete dyr.

 

Hvis panda er et utryddingstruet dyreart, så er dette svaret på det du spør etter her..

 

PS: At "Threat" er en subklasse av ZooAnimal gir absolutt ingen mening, så det kan umulig stå i oppgaveteksten din..

Endret av krigun
Lenke til kommentar

Her er oppgaveteksten til den delen av oppgaven:

Vi ønsker å gi informasjon om utrydningstruede dyr. Implementer en ny klasse, Endangered, som en subklasse av ZooAnimal. Denne klassen blir superklassen til truede dyreklasser. Endangered er en abstrakt klasse. Må definere en abstrakt metode for å hente ut informasjon om hvor utrydningstruet denne arten er. Det finnes tre kategorier (CR – critical endangerd, EN – endangered, VU – vulnerable). Av disse tre er CR den mest alvorlige.

 

 

Her er det som er gjort så langt. OBS! 3 klasser i denne koden... Bare postet de slik for latskapens skyld.

/**
* Class ZooAnimal - generalisering av de ulike dyreklassene. 
 * 
 */
public class ZooAnimal
{
   // data felt som var i Panda før har blitt flyttet opp hit
   private String name;
   private String origin;   // hvor kom dyret opprinnelig fra, sted, land eller kontinent?
   private String description;
   private int age; 
   private String food;  // hva spiser dyret
   private Sex sex; // hvilket kjønn har dyret
   private String panda;  // hva spiser dyret
   private String kenguru;  // hva spiser dyret
   private Threatlevel threatlevel;


   /**
    * Default constructor for ZooAnimal er beskyttet sånn at den ikke 
    * skal kunne kalles av andre enn subklassene.
    */
   protected ZooAnimal() {
       name = null;
       origin = null;
       description = null;
       age = 0;
       sex = Sex.UNKNOWN;
       threatlevel = null; 
   }
   /** 
    * konstruktør som setter navn, beskrivelse og alder. Den er satt til beskyttet slik at 
 * bare subklasser skal kunne kalle den. 
    * @param name  Navnet til dyret
    * @param desc  En beskrivelse av dette dyret
    * @param age   Hvor gammelt er dyret
    */
   protected ZooAnimal(String name, String desc, int age) {
       this.name = name.trim();
       this.age = age;
       description = desc.trim();
       origin = null;
       sex = Sex.UNKNOWN;
       threatlevel = null; 
   }
   /**
    * Sett navnet til ZooAnimal
    * @param name   Sett navnet til dyret
    */
   public void setName(String name)
   {
       this.name = name.trim();
   }    
   /**
    * Hent navnet til dyret
    * @return navnet til dyret
    */
   public String getName() {
       return name;
   }
   /**
    * Sett alderen til et ZooAnimal
    * @param age  Alderen som dyret får
    */
   public void setAge (int age) {
       if (age >= 0) {
           this.age = age;
       }
   }
   /**
    * Hent alderen til dyret
    * @return  Alderen til dyret.
    */
   public int getAge (int age) {
       return age;
   }
   /**
    * Sett beskrivelsen om et dyr
    * @param desc  Beskrivelsen til et dyr
    */
   public void setDescription ( String desc) {
       description = desc.trim();
   }
   /**
    * Hent ut beskrivelsen til et dyr
    * @return   Beskrivelsen til et dyr
    */
   public String getDescription() {
       return description;
   }
   /**
    * Sett hvilket sted, land eller kontinent dyrearten kommer fra
    * @param o Stedet hvor dyret opprinnelig kommer fra.
    */
   public  void setOrigin(String o) {
       origin = o.trim();
   }
   /**
    * Hent navnet til stedet hvor dyrearten opprinnelig kommer fra
    * @return Navnet på land eller kontinentet hvor dyret opprinnelig kommer fra.
    */
   public  String getOrigin() {
       return origin;
   }
   /**
    * Sett hvilken mat dyret spiser.
    * @param food  hvilken mat dyret spiser.
    */
   public void setFood(String food) {
       this.food = food.trim();
   }
/**
 * Hent ut info om hva slags mat dyret spiser
 * @return Typen mat dyret spiser
    */
   public String getFood() {
       return food;
   }
   /**
    * Spesifiser hvilket kjønn dyret har. Siden vi bruker en enum, trenger vi ikke sjekke 
 * om det er en lovlig verdi!
    * @param  Kjønnet til dyret.
    */
   public void setSex(Sex aSex) {
       sex = aSex;
       }
   /**
    * Hvilket kjønn har dyret?
    * @return Kjønnet til dyret. 
    */
   public Sex getSex() {
       return sex;
   }
   /**
    * Spesifiser hvilket kjønn dyret har. Siden vi bruker en enum, trenger vi ikke sjekke 
 * om det er en lovlig verdi!
    * @param  Kjønnet til dyret.
    */
   public void set(Threatlevel aThreatlevel) {
       threatlevel = aThreatlevel;
       }
   /**
    * Hvilket kjønn har dyret?
    * @return Kjønnet til dyret. 
    */
   public Threatlevel getThreatlevel() {
       return threatlevel;
   }
   /** 
    * Hent ut beskrivelsen av dyret. 
 * @return En samlet beskrivelse av det vi vet om dyret så langt. 
    */
    public String toString() 
    {
        // Det er lagt en tabulator (\t) inn i begynnelsen av hver linje.
      String returnString = "\tAlder: " + age + "\n";
      if (sex != Sex.UNKNOWN)
         returnString += "\tKjønn: " + sex + "\n"; // NB: toString() blir kalt på sex.
      if (food != null ) 
           returnString += "\t Spiser: " + food + "\n";
      if (getDescription() != null)
           returnString += "\tBeskrivelse: " + description + "\n";
      if (getOrigin() != null)
           returnString += "\tKommer opprinnelig fra: " + origin + "\n";
      return returnString;
   }
}







**********************************************************************************************************



public abstract class Endangered extends ZooAnimal
{
   public Endangered()
   {
       super();
   }
   
   public Endangered(String name, String desc, int age)
   {
       super(name, desc, age);
   }
   
   public abstract Threatlevel getThreatlevel();
}



************************************************************************************************************



public enum Threatlevel
{

   CR("Critically endagered!"),EN("Endagered!"),VU("Vulnerable!");
   
   private String print;
   
   Threatlevel(String value) {
       print = value;
   }
   
   //skrive ut tekstrenger ved tostring metoden
  
 public String toString() {
       return print;
   }   
}


*******************************************************************************************************************




Endret av lizza-krissa
Lenke til kommentar

Sitter med en gnagende følelse av at enten så er oppgaveskriveren forvirret, eller så har du misforstått noe.

 

Abstrakte metoder brukes for å kunne overlate ansvaret for implementering til en klasse som arver fra denne.

 

La oss anta at dyr kan ha følgende verdier for truet:

 

1. Truet

2. Veldig truet

3. Utryddet

 

Videre antar jeg at det er ment i oppgaven at ikke alle dyr skal ha egenskapen truet, selvom jeg synes det ville være naturlig med tilstanden "Ikke truet" også.

 

public class Animal { 

 private String name;
 public void setName(String name) {
    this.name = name;
 }
 public String getName() {
    return name;
 }
}

public abstract class EndangeredAnimal extends Animal { 
 public abstract ThreatLevel getThreatLevel();
}

public class Geirfugl extends EndangeredAnimal {
 public ThreatLevel getThreatLevel() {
   return truet bla bla 
 }
}

 

 

Uansett, så ville jeg skjært koden ned til benet og heller bygd opp med fluff for å få med properties senere, det gjør det litt lettere å jobbe med.

Lenke til kommentar
Jeg skal lage en abstract klasse som skal retunere en bestemt verdi om noen ting. F. eks så har jeg to dyr som er truet. Jeg må lege en abstrakt metode for å hente ut hvor truet de dyrene er. Jeg har flere typer dyr også, men de to dyrene her er like truet. Jeg vet ikke helt hvordan jeg skal angripe dette...

8467674[/snapback]

 

1. Klasser returnerer ingenting, det er det metoder som gjør.

 

2. Abstrakte metoder returnerer ingenting, for de har ingen kropp (dvs ingen {}).

 

3. Å deklarere en metode abstrakt betyr: Alle klasser som arver fra denne klassen implementere sin egen versjon av den abstrakte metoden.

Lenke til kommentar

Jeg vet dette er litt teit spørsmål, men jeg sliter virkelig... Jeg har en oppgave som skal leveres om noen timer også kommer jeg ikke videre. Er det noen som kan hjelpe meg litt med denne delen hvis jeg sender den som en zip eller rar fil på e-post? Altså jeg sender alt jeg har gjort pluss oppgaveteksten... Så kan dere se på det også gi meg et tips? jeg ber ikke dere om å gjøre oppgaven foe meg, men å se på den slik at dere kan forklare meg eller å hjelpe meg videre fra der jeg er nå. Jeg får ikke karaktere eller noe på oppgaven. Det er bare noe som må leveres for å få ta eksamen. Jeg har klart alt helt til nå. Det er bluej filer...

Endret av lizza-krissa
Lenke til kommentar
Vi ønsker å gi informasjon om utrydningstruede dyr. Implementer en ny klasse, Endangered, som en subklasse av ZooAnimal. Denne klassen blir superklassen til truede dyreklasser.

 

Å lese denne teksten får meg til å tenke på at læreren/bokforfatteren er HEEELT ute og kjører med OO konseptene sine. Dette blir jo uansett feil. Hva med planter som er utrydningstruet da? Mulig jeg sov i naturfagstimene, men jeg mener å huske at et tre som er utrydningstruet har lite/ingenting til felles med et dyr i dyrehagen.

Lenke til kommentar

Men se på det Bigbagaroo har skrevet da. Det er strukturen du ønsker å lage også.

 

Edit: Ja, og post 8.

 

Jeg koder gjerne Java for deg. På fakturaen fra min arbeidsgiver vil det stå 1190 kr/timen, pluss moms. Svart kan jeg gjøre det for 300 kr/timen.

Endret av buskmann
Lenke til kommentar
Jeg koder gjerne Java for deg. På fakturaen fra min arbeidsgiver vil det stå 1190 kr/timen, pluss moms. Svart kan jeg gjøre det for 300 kr/timen.

8471748[/snapback]

 

Hehe, vil tro markedet for denslags er rimelig stort. Tittel: Oppgavekonsulent

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...