Nyckelord: Klasser, Objekt
Skapa en klass och objekt av en bil
Vi ska i denna uppgift testa att skriva vår första klass. Vi ska skapa klassen Car (bil) och lägga in typiska egenskaper för att visa hur vi kan skapa och hantera objekt.
Utgå från följande program:
public class KlasserObjektUppgift1 {
public static void main(String[] args) {
// Skriv din kod här
}
}
Skapa sedan en ny fil och namnge den till Car.
filen Car.java:
public class Car {
}
Vi har nu två filer, huvudskriptet i filen KlasserObjektUppgift1 samt filen Car som är klassen vi ska bygga upp.
a: Skapa instansvariablerna
Börja med att skapa instansvariablerna model, color samt year med motsvarande datatyper String, String och int. Instansvariablerna ska inte gå att anropa någon annanstans än inne i klassen.
Ledtråd a
En instansvariabel blir enbart synlig för klassen när man anger private när man skapar dem. Exempelvis:
private double instansvariabel;
b: Skapa konstruktorn
Skapa en konstruktor för klassen Car. I konstruktorn ska alla instansvariabler få värden tilldelade till sig.
Ledtråd b
Använd this för att tilldela värden till instansvariablerna. Exempelvis:
Syntaxmall: byt ut platshållarna mot konkreta namn, typer och värden.
Klassnamn(String instansvariabel){
this.instansvariabel = instansvariabel;
}
c: Skapa getters och setters
Skapa nu getters och setters. Det ska alltså finnas tre getters och tre setters. Vi ska ha en getter för varje instansvariabel som returnerar motsvarande instansvariabel. Vi ska även ha tre setters som givet ett värde uppdaterar instansvariabeln till det nya värdet. Alla getters och setters ska kunna anropas utifrån klassen.
Ledtråd c
En getter kan man skapa genom en ny metod som returnerar instansvariabeln.
public int getInstansvariabel(){
return instansvariabel;
}
En setter kan man skapa genom en ny metod som givet ett värde uppdaterar en instansvariabel.
public void setInstansvariabel(int instansvariabel){
this.instansvariabel = instansvariabel;
}
En metod kan anropas utifrån klassen genom att ange public när man skapar metoden.
d: Instansiera objekt
Vi kan nu skapa nya objekt i huvudskripet. Skapa två nya bilar. Den första bilen ska vara en svart Volvo från 2017 och den andra bilen ska vara en blå BMW från 2004. Testa skriva ut några instansvariabler för att se om det fungerar.
Ledtråd d
En instans (ett objekt) från klassen kan skapas med följande syntax:
Syntaxmall: byt ut platshållarna mot konkreta namn, typer och värden.
Klassnamn objektnamn = new Klassnamn(datatyp parameter1, datatyp parameter2);
e: ändra objektens variabler
Avslutningsvis, testa att byta värdena i varje objekt. Uppdatera objekten så att Volvon istället blir vit och året på BMW:n uppdateras till 2008.
Ledtråd e
Använd dina setters för att uppdatera varje objekt.
car.setModel("Polestar");
Lösning
Klassen Car.java.
public class Car {
// Instansvariabler
private String model;
private String color;
private int year;
// Konstruktorn
Car(String model, String color, int year){
this.model = model;
this.color = color;
this.year = year;
}
// Setters
public void setModel(String model){
this.model = model;
}
public void setColor(String color){
this.color = color;
}
public void setYear(int year){
this.year = year;
}
// Getters
public String getModel(){
return this.model;
}
public String getColor(){
return this.color;
}
public int getYear(){
return this.year;
}
}
Huvudskriptet:
public class KlasserObjektUppgift1 {
public static void main(String[] args) {
// Skapar två objekt av typen Car
Car car1 = new Car("Volvo", "Black", 2017);
Car car2 = new Car("BMW", "Blue", 2004);
// Skriver ut en instansvariabel från varje objekt
System.out.println(car1.getModel());
System.out.println(car2.getModel());
// Uppdaterar instansvariablerna
car1.setColor("White");
car2.setYear(2008);
// Skriver ut de nya värdena
System.out.println(car1.getColor());
System.out.println(car2.getYear());
}
}
Förklaring:
Klassen Car innehåller tre instansvariabler som definieras i konstruktorn. Med nyckelordet this anger vi att det är instansvariabeln som ska uppdateras. Varje getter returnerar motsvarande instansvariabel och varje setter uppdaterar motsvarande instansvariabel.
I huvudskriptet kan vi nu skapa objekt från klassen där varje objekt håller sina egna instansvariabler. Objekten är oberoende på varandra så genom att anropa en getter/setter för ett objekt, vet man säkert att det enbart är ett objekt själv som uppdateras.