8.7 KiB
8.7 KiB
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");
Modifier
Quelle: w3schools.com
Access-Modifier
Modifier | Beschreibung |
---|---|
public | The code is accessible for all classes |
private | The code is only accessible within the declared class |
protected | The code is accessible in the same package and subclasses. |
default | The code is only accessible in the same package. This is used when you don't specify a modifier. |
Non-Access-Modifier
Modifier | Beschreibung |
---|---|
final | The class cannot be inherited by other classes |
abstract | The class cannot be used to create objects (To access an abstract class, it must be inherited from another class. |
#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);
}
}