webForumDet fria alternativet

nybörjar hjälp!!

3 svar · 811 visningar · startad av niclas.j

niclas.jMedlem sedan juni 2000122 inlägg
#1

Hej.
Skulle behöva lite hjälp. jag ska skapa en class bil och en subclass person sen ska jag skriva ut metoderna för bil och metoderna för person......men koden skriver bara ut metoderna för bil??? säkert hur enkelt som helst...men inte för mig!

kod:
// Class bilar1
class bilar1 {
String fabrikat;
String modell;
String year;
String color;
String regnummer;

public static void main (String args []){
bilar1 bil = new bilar1();
bil.fabrikat ="Ford";
bil.modell ="Mondeo";
bil.year ="1998";
bil.color ="Röd";
bil.regnummer ="ETF547";

bil.skrivUtEgenskaper();

}

void skrivUtEgenskaper(){
System.out.println("bil1\n" + fabrikat + "\n" + modell + "\n" + year + "\n" + color + "\n" + regnummer);
}
}

// Sub class owner

class owner extends bilar1{
String namn;
String year;
String bilregnummer;

public void owner (String args []){
owner person = new owner();
person.namn ="Kalle Persson";
person.year ="54";
person.bilregnummer ="ETF547";

}

public staic void test(){
owner.skrivUtEgenskaper();
System.out.println("ägare\n" + namn + "\n" + year + "\n" + bilregnummer);
}
}

//niclas

------------------
ingenting är omöjligt det tar bara lite längre tid..

ChainsawMedlem sedan sep. 20001 282 inlägg
#2

Anledningen till att du inte skriver ut någon ägarinfo är för att du inte ens petar på den klassen (kolla main-funktionen, inga referenser till owner). Dessutom måste jag verkligen ifrågasätta din logik här. Hur många bilägare har du sett som faktiskt fysiskt är en bil?

------------------
Den fruktade Motorgåsen - på korståg för att utrota popup-fönster, Flash-banners, nykterister utan humor som befinner sig på samma fest som mig, felaktiga ordspråk, öl som inte smakar gott och andra styggelser!

sgtpepperMedlem sedan apr. 20005 524 inlägg
#3

1. I Java skall alla klassnamn deklareras med stor begynnelsebokstav, i ditt fall skall alltså klasserna heta Bilar1 och Owner.

2. Att blanda svenska och engelska i klassnamn, metodnamn och liknande är inte felaktigt men det är inte snyggt.

3. En Owner kan rent objektorienteringsmässigt inte ärva en Bil, dvs en Bil kan inte vara anfader till en person av naturliga skäl :).

4. public void owner (String args []), vad är detta? Om det är owner-klassens konstruktor så är den felskriven och är det en main-metod så är den också fel. Antingen:
public owner() (konstruktor)
eller
public static void main (String args []) (main-metod)

5. I den statistka metoden test() i owner-klassen så kan du inte anropa en icke-statisk metod (skrivUtEgenskaper)

6. Om du kör main() i bilar1 så kommer just bara skrivUtEgenskaper() anropas på bilar1-objektet.

------------------
"To iterate is human, to recurse, divine" - L. Peter Deutch

LimeMedlem sedan sep. 2001837 inlägg
#4

Låt oss objektorientera lite och se om vi kan få lite kontroll på detta? (hehe vad vitsig jag är).

Först och främts bör vi kanske klura ut lite vad vi behöver ha för objektstruktur. Vi börjar med Car. Personligen skulle jag låta Car ärva från en huvudklass Vehicle.

Alla Vehicle (fordon) har vissa gemensamma egenskaper som färg, antal hjul, modellnamn och fabrikat. Det finns även en del metoder som är gemensamma för alla fordon. Vi vill t.ex. att det skall gå att skriva ut alla egenskaper för ett fordon.

Klassen blir då att se ut såhär:

/**
 * Vehicle.java
 *
 *
 * Created: Wed Sep  5 10:43:17 2001
 *
 * @author <a href="mailto: "Lime</a>
 * @version
 */

abstract class Vehicle {
  private String manufacturer;
  private String model;
  private int year;
  private String color;
  
  
  public Vehicle (String ma, String mo, int y, String c){
    manufacturer = ma;
    ...
	
    }

  abstract public void printVehicleData();

  public void printVehicleMainData() {
    StringBuffer data = new StringBuffer();

    data.append("Manufacturer: " + manufacturer + "\n");
    data.append("Model: " + model + "\n");
    data.append("Year: " + year + "\n");
    data.append("Color: " + color + "\n");

    System.out.println(data.toString());
  }
  (och så set/getmetoder för alla attribut)

}// Vehicle

Sedan låter vi bilklassen Car ärva från denna. En bil har även lite andra saker som ett Vehicle inte har. Alltså behöver vi bygga på klassen.

Då ser den ut såhär:

public class Car extends Vehicle{
  String regno;
  Person owner;

  public Car (String ma, String mo, int y, String c, String rn, Person o){
    super(ma,mo,y,c);
    regno = rn;
    owner = o;
	
    }

  // Det här görs för att inte klassen Car skall bli abstract
  public void printVehicleData(){
    printVehicleMainData(); // Det här funkar, eftersom Car har ärvt metoden från Vehicle

    System.out.println("Regnumber:" + regno);
    System.out.println("Owner: " + owner.toString());

  }

  (Och så alla get och set metoder...)

}// Car

Nu behöver du bara implementera klassen Person och göra en testklass.

/Lime

------------------
Praeterea conseo microsoftenem esse delendam.
- modernt latinskt ordspråk

[Redigerat av Lime den 05 sep 2001]

Genererad på 368 ms · cache AV · v20260730165559-full.f96bc7eb