Zum Inhalt

04: Einführung in Objekte

Kurze Begriffserklärung

Quelle: stackhowto.com

Declaration

Declaring a variable means the first “mention” of the variable, which tells the compiler “Hello, I am here and can be used”. In a statically typed language like Java, this also means that the declared type of the variable is determined. The value itself is not determined during the declaration.

String name;
int nbr;

Initialization

The term initialization usually means the first assignment of a value to a variable.

String name = "Thomas";
int nbr = 5;

Instantiation

The term instantiation actually has nothing to do with assigning a value to a variable, even if a new object is sometimes instantiated when a variable is initialized. The term simply means the creation of a new object, i.e. an instance, from a class.

String name = new String("Thomas");

#1 Einfache Objekte und Veerbung

Lernziele: * eine Klasse erzeugen * eine Klasse aufrufen * einfache Veerbung * Polymorphie (Überschreiben von Methoden) * die Verwendung von this * die Verwendung von super

// main.java
public class Main {
    public static void main(String[] args) {
        Animal myAnimal = new Animal();
        myAnimal.makeSound();

        Dog myDog = new Dog();
        myDog.makeSound();

        Cat myCat = new Cat();
        myCat.makeSound();

        myCat.compareToAnimal();
    }
}
// Animal.java
public class Animal {
    public boolean isPet;

    public Animal() {
        System.out.println("## in constructor of Animal");
        this.isPet = false; // it doesn't exist for our cats or dogs
    }

    public void makeSound() {
        System.out.println("Yes, animal usually make sounds");
    }

}

// Cat.java
public class Cat extends Animal {

    public Cat() {
        System.out.println("## in constructor of Cat");
        this.isPet = true;
    }

    @Override
    public void makeSound() {
        System.out.println("meow meow");
    }

    public void compareToAnimal() {
        System.out.println("--- Animal ---");
        super.makeSound();
        System.out.println("is alive: " + super.isPet);

        System.out.println("--- Cat ---");
        this.makeSound();
        System.out.println("is alive: " + this.isPet);
    }
}
// Dog.java
public class Dog extends Animal {

    public Dog() {
        System.out.println("## in constructor of Dog");
        this.isPet = true;
    }

    @Override
    public void makeSound() {
        System.out.println("woof woof");
        this.isPet = true;
    }

    public void compareToAnimal() {
        System.out.println("--- Animal ---");
        super.makeSound();
        System.out.println("is alive: " + super.isPet);

        System.out.println("--- Cat ---");
        this.makeSound();
        System.out.println("is alive: " + this.isPet);
    }

}

#2 komplexere Vererbung von Klassen

Lernziele: * Erweiterte Veerbung * Modifikatoren für Attribute * Getter und Setter * Konstruktorverkettung

// main.java
public class Main {
    public static void main(String[] args) {
        Vehicle myVehicle = new Vehicle();
        System.out.println("-- myVehicle:");
        System.out.println("number of wheels: " + myVehicle.getNumberOfWheels());
        System.out.println("max Speed: " + myVehicle.getMaxSpeed());
        myVehicle.setMaxSpeed(150);
        System.out.println("max Speed: " + myVehicle.getMaxSpeed());

        Car myCar = new Car("blue");
        System.out.println("-- myCar:");
        System.out.println("number of wheels: " + myCar.getNumberOfWheels());
        System.out.println("max Speed: " + myCar.getMaxSpeed());
        myVehicle.setMaxSpeed(150);
        System.out.println("max Speed: " + myCar.getMaxSpeed());
    }
}
public class Vehicle {
    protected int numberOfWheels;
    protected int maxSpeed;

    public Vehicle() {
        System.out.println("## in default constructor of Vehicle");
        this.numberOfWheels = 4;
        this.maxSpeed = 100;
    }

    public Vehicle(int numberOfWheels, int maxSpeed) {
        System.out.println("## in constructor of Vehicle");
        this.numberOfWheels = numberOfWheels;
        this.maxSpeed = maxSpeed;
    }

    public int getNumberOfWheels() {
        return this.numberOfWheels;
    }

    public int getMaxSpeed() {
        return this.maxSpeed;
    }

    public String printMaxSpeed() {
        return this.maxSpeed + " km/h";
    }

    public void setMaxSpeed(int newMaxSpeed) {
        if (newMaxSpeed < 0) {
            return;
        }
        this.maxSpeed = newMaxSpeed;
    }

}
public class Car extends Vehicle {
    private String color;

    public Car(String color) {
        super(4, 200); // always needs to be the first statement
        System.out.println("## in constructor of Car");
        this.color = color;
    }

    @Override
    public void setMaxSpeed(int newMaxSpeed) {
        if (newMaxSpeed < 1000) {
            System.out.println("No car shall be this slow tbh");
            return;
        }
        this.maxSpeed = newMaxSpeed;
    }
}
public class Car extends Vehicle {
    private String color;

    public Car(String color) {
        super(4, 200); // always needs to be the first statement
        System.out.println("## in constructor of Car");
        this.color = color;
    }

    @Override
    public void setMaxSpeed(int newMaxSpeed) {
        if (newMaxSpeed < 1000) {
            System.out.println("No car shall be this slow tbh");
            return;
        }
        this.maxSpeed = newMaxSpeed;
    }
}
public class Truck extends Vehicle {
    private boolean isFireTruck;
    private final String hornSound;

    public Truck(boolean isFireTruck) {
        super(4, 200); // always needs to be the first statement
        System.out.println("## in constructor of Truck");
        this.isFireTruck = isFireTruck;
        this.hornSound = "test";
    }

    public boolean getIsFireTruck() {
        return this.isFireTruck;
    }
}

#3 static in einer Klasse

Lernziele: * statische und dynamische Variablen * statische und dynamische Methoden

// main.java
public class Main {
    public static void main(String[] args) {
        Counter.printCounterStatic("Static");
        Counter.increaseCounterStatic();
        Counter.printCounterStatic("Static");

        Counter myCounter = new Counter();
        Counter.increaseCounterStatic();
        myCounter.increaseCounterDynamic();
        myCounter.printCounterDynamic("Dynamic");
    }
}
public class Counter {
    static int counterValueStatic = 0;
    int counterValueDynamic = 0;

    public static void increaseCounterStatic() {
        counterValueStatic++;
    }

    public void increaseCounterDynamic() {
        this.counterValueDynamic++;
    }

    public void printCounterDynamic(String classID) {
        System.out.println(">> execute printCounterDynamic of class " + classID);
        System.out.println("static: " + counterValueStatic);
        System.out.println("dynamic: " + this.counterValueDynamic);
    }

    public static void printCounterStatic(String classID) {
        System.out.println(">> execute printCounterStatic of class " + classID);
        System.out.println("dynamic: " + counterValueStatic);
    }
}

Letztes Update: November 2, 2022 20:46:05
Erstellt: November 2, 2022 20:46:05
Authors: YamiDoesDev