LÄR DIG JAVA

Objekt i Java - Skapa en instans av en klass


Nyckelord: Objekt, Instans, Klass, Objektorienterad programmering, Inkapsling

Object Java

I den här artikeln ska vi lära oss vad ett objekt är i Java. Inom objektorienterad programmering så använder vi objekt och klasser för att bygga upp våra program.

Vad är ett objekt i Java?

Objekt har egna instansvärden men kan dela referenser och bero på andra objekt. Inkapsling döljer interna detaljer och styr hur tillstånd får ändras; den garanterar inte oberoende.

Inkapsling betyder att samla tillstånd och beteende och styra åtkomsten till interna detaljer, exempelvis med privata fält och publika metoder. Det gör inte objekt automatiskt oberoende: de kan dela referenser och påverka gemensamma objekt.

Kort sammanfattat så är ett objekt i Java:

  • En instans av en klass och håller de attribut som är angivna vid instansieringen.
  • Kan utföra de metoder som är angivna i motsvarande klass.
  • Objekt har egna instansvärden men kan dela referenser och bero på andra objekt. Inkapsling döljer interna detaljer och styr hur tillstånd får ändras; den garanterar inte oberoende.

Hur fungerar objekt i Java?

Man kan beskriva det som att ett objekt i Java har tre egenskaper:

  1. Tillstånd: representerar den data/värde som ett objekt har.
  2. Beteende: representerar funktionaliteten hos ett objekt.
  3. Identitet: två referenser kan peka på samma objekt. Operatorn == jämför om referenserna avser samma objekt. equals kan i stället vara definierad för att jämföra innehåll.

När vi arbetar med objekt så är det uteslutande de två första egenskaperna vi fokuserar på, det tillstånd som ett objekt har och dess beteende.

Till exempel, om vårt objekt är en bil så är:

  • Tillstånd. Färg, årsmodell, märke, med mera.
  • Beteende: köra framåt, tuta, svänga, med mera.
Objekt object java

Beteenden för ett objekt specificeras i de metoder som klassens innehåller.

Ett objekt i Java kan vara i princip precis vad som helst, eftersom det är du själv som avgör hur objektet definieras när du skapar klassen. Man brukar säga att ett objekt är en instans av en klass.

Instansvariabler

Som vi nämnde tidigare så brukar man säga att ett objekt är en instans av en klass. De attributen som ska definieras när man skapar ett objekt kallas därför naturligt för instansvariabler. Objekt från samma klass har samma deklarerade instansfält, men varje objekt kan ha egna fältvärden.

Hur skapar man ett objekt i Java?

Vi använder nyckelordet new tillsammans med klassens konstruktor för att skapa ett objekt. En konstruktor liknar en metod och har samma namn som klassen. Vi kommer att titta närmare på vad en konstruktor i Java är på nästa sida, men nu nöjer vi oss med att konstatera att den används för att instansiera ett objekt.

Vidare, praxis är att namnet på objektet börjar med liten bokstav.

Syntax: Skapa ett objekt i Java

Följande syntax används för att instansiera ett objekt med inparametrar

Syntaxmall: byt ut platshållarna mot konkreta namn, typer och värden.

// Syntax för objekt med inparametrar
KlassNamn objektNamn = new KlassNamn(datatyp parameter1, ...);

Innanför parentesen så anger vi de inparametrar som konstruktorn behöver. Detta är alltså de attributen som objektet ska få.

Syntax: Skapa ett objekt i Java utan inparametrar

Om den konstruktor som klassen har inte kräver några inparametrar för att skapa ett objekt lämnar man helt enkelt parentesen tom.

// Syntax för objekt utan inparametrar
KlassNamn objektNamn = new KlassNamn();

Exempel: Objekt i Java

Nu ska vi se två exempel på hur vi kan skapa objekt i Java. Än en gång, vi kommer referera till klassens konstruktor under dessa exempel, men oroa dig inte om det är något du inte känner igen, vi kommer som sagt titta närmare på konstruktorn i nästa artikel.

Exempel 1: Skapa ett objekt från en klass i Java

I föregående artikel beskrev vi klassen hund enligt koden, där vi också har lagt till konstruktorn för klassen.

//Skapar klassen "Dog". Praxis är att klassnamn har stor bokstav
class Dog {

    //Definierar tillstånden/attributen för klassen hund
    String name;
    int age;
    String breed;
    String color;

    //Definiera konstruktorn (mer om det i nästa artikel) 
    Dog(String name, int age, String breed, String color){
        this.name = name;
        this.age = age;
        this.breed = breed;
        this.color = color;
    }

    //Definierar metoderna (egenskaperna) för klassen hund
    void bark(){
         System.out.println(name + " skäller");
    }

    void eat(){
         System.out.println(name + " äter");
    }

    void sleep(){
         System.out.println(name + ": zZZzzZzzZ");
    }
}
Objekt Java Exempel Övningsuppgift

Figur 1: Attribut och egenskaper för exemplet med objektet hund

Vi ska nu i detta exempel skapa två stycken hundar, alltså två stycken objekt från samma klass:

Hund 1

  • Namn: Bosse
  • Ålder: 3
  • Ras: Terrier
  • Färg: Brun

Hund 2

  • Namn: Båtsman
  • Ålder: 5
  • Ras: Sankt Bernhard
  • Färg: Svart

Vi skapar nu dessa två objekt i main-metoden:

    // Main-metoden
    public static void main(String args[]){
        Dog dog = new Dog("Bosse", 3, "Terrier", "Brun");
        Dog dog2 = new Dog("Båtsman", 5, "Sankt Bernhard", "Svart");
    }

Vi har nu två stycken objekt av typen Dog. Det ena objektet heter “dog” och det andra objektet heter "dog2", och vi kan exempelvis anropa metoderna i vardera objekt enligt rad 38, 39 och 40 som vi lägger till i main-metoden.

    // Main-metoden
    public static void main(String args[]){
        Dog dog = new Dog("Bosse", 3, "Terrier", "Brun");
        Dog dog2 = new Dog("Båtsman", 5, "Sankt Bernhard", "Svart");

        // Anropa metoder
        dog.eat();
        dog2.bark();
        dog.sleep();
    }

Resultatet vi får blir då:

Bosse äter 
Båtsman skäller
Bosse: zZZzzZzzZ

Vilket låter väldigt trevligt för Bosse, att han först får äta mat och sen ta en liten tupplur. Som du ser så skiljer de två hundarna sig åt, men vi kan trots det använda samma klass för att skapa objekten (de har ju alla samma egenskaper). Detta är väldigt användbart när man vill programmera flera objekt av samma sort, till exempel, kanske vill du programmera en hel hundgård av kompisar till Bosse och Båtsman?

Exempel 2: Skapa ett smartphone objekt från en klass

Vi tar ett till exempel bara för att det ska bli extra tydligt. I det här exemplet ska vi skapa två mobiltelefoner och låt oss börja med att titta på vår klass som vi har döpt till SmartPhone som innehåller följande

Object Java
public class SmartPhone {

    // Variabler vi använder i konstruktorn
    private String brand;
    private String model;

    // Klassens konstruktor
    SmartPhone(String brand, String model){
        this.brand = brand;
        this.model = model;

    }

    public void call(){

        System.out.println("Nu ringer: " + brand + " " + model);
    }

    public void sendText(){

        System.out.println( brand + " " + model + " skickar ett SMS");
    }
}

Det som är viktigt att notera här är hur många inparametrar klassens konstruktor kräver. Kom ihåg att inparametrar som konstruktorn behöver är de attributen som objektet ska få.

Om vi sedan tar och skapar två telefoner, eller rättare sagt, två objekt:

public class testClass {

    public static void main(String args[]) {

        // Skapar ett objekt för en iPhone
        SmartPhone iPhone = new SmartPhone("iPhone" , "12");

        iPhone.call();
        iPhone.sendText();

        // Skapar ett objekt för en Samsung
        SmartPhone samsung = new SmartPhone("Samsung", "Galaxy S20"); 
        
        samsung.call();
        samsung.sendText();
                
    }
}

Det vi har gjort är att skapa ett objekt för en iPhone (rad 5) och en Samsung (rad 12). Vi har skapat objekten genom att först ange namnet på klassen, SmartPhone, följt av det namn som vi vill ge vårt objekt. Sedan så skriver vi new följt av klassens namn igen. Viktigt att notera att innanför parentesen så ger vi två inparametrar och båda är datatyp String.

Hur man vet hur många inparametrar som behövs och av vilken datatyp? Det bestämmer vi i klassens konstruktor.

Om vi tar och exekverar koden ovan så får vi resultatet:

Nu ringer: iPhone 12
iPhone 12 skickar ett SMS
Nu ringer: Samsung Galaxy S20
Samsung Galaxy S20 skickar ett SMS

Sammanfattning: Objekt i Java

Objekt har egna instansvärden men kan dela referenser och bero på andra objekt. Inkapsling döljer interna detaljer och styr hur tillstånd får ändras; den garanterar inte oberoende.

Praxis när man instansierar ett objekt är att namnet på objektet börjar med liten bokstav.

Syntax för att skapa ett objekt

Syntaxmall: byt ut platshållarna mot konkreta namn, typer och värden.

// Syntax för objekt
KlassNamn objektNamn = new KlassNamn(datatyp parameter1, …);

Vanliga frågor och svar: Objekt i Java

Vad menas med att instansiera ett objekt?

Ett objekt är vad som kallas för en instans av en klass och när vi instansierar ett objekt så betyder det helt enkelt att vi skapar ett objekt från en klass.

Hur skapar man ett objekt i Java?

Syntax för att skapa ett objekt är:
KlassNamn objektNamn = new KlassNamn(datatyp parameter1, …);

Det betyder att vi använder nyckelordet new tillsammans med klassens konstruktor för att skapa ett objekt. En konstruktor liknar en metod och har samma namn som klassen. Innanför parentesen så anger vi de inparametrar som konstruktorn behöver och det är de attributen som objektet ska få. Om den konstruktor som klassen har inte kräver några inparametrar för att skapa ett objekt lämnar man helt enkelt parantesen tom.

Vad är egentligen ett objekt och vad är det för skillnad mot en klass?

Enkelt förklarat så kan man beskriva det som att skillnaden mellan en klass och ett objekt är att en klass är en mall för objekt. Om vi tar ett exempel med en bil så är en klass den mall/ritning som beskriver vad bilen ska bestå av och vad bilen ska kunna utföra. Ett objekt är då en bil som är skapad utifrån den mallen, eller rättare sagt, av den klassen.