Intro to Classes and Objects

Lesson 8 - OOP

There are four main OOP (object oriented programming) concepts in Java.

  • Encapsulation (setters and getters, we will discuss this today)

  • Abstraction

  • Inheritance

  • Polymorphism

Today OOP topics

  • non static methods

  • this

  • constructors and copy constructors

  • objects are passed to functions as references

  • toString

OOP - Encapsulation

הסתרת מידע

  • public and private

  • getters and setters

What are Classes and objects?

  • Class - Dogs

  • Data members or objects- size, age, color, breed, etc.

  • Methods- sleep(), toString()

Attempt 1 🐶

// Class Declaration
public class Dog {
    // Instance Variables
    String breed;
    String name;
    String size;
    int age;
    String color;


    // non static method
    public void sleep() {
        System.out.println(name + " is sleeping");
    }

    //static method
    public static void whoIsSleeping(Dog dog){
        System.out.println(dog.name + " is sleeping");
    }

    public String toString() {
        return ("Name : "+name+ "\nBreed is: "+breed+"\nSize is: "+size+"\nAge is: "+age+"\nColor is: "+color+ "\n");
    }


    public static void main(String[] args) {
        Dog maltese = new Dog();
        maltese.breed="Maltese";
        maltese.size="Small";
        maltese.age=2;
        maltese.color="white";

        maltese.sleep();

        System.out.println();
        System.out.println(maltese);

        maltese.name="fluffy";
        Dog.whoIsSleeping(maltese);
    }
}
null is sleeping

Breed is: Maltese
Size is: Small
Age is: 2
Color is: white

fluffy is sleeping
  • we have a static method (doesnt belong to class), whoIsSleeping()

  • we have a non static method (belongs to class), sleep()

We got null is slepping , we forgot to initialize the name we should use a constructor

Attempt 2 - Adding constructors

here we will add 2 constructors

  • a copy constructor

  • a constructor that receives arguments

public class Main {
    public static void main(String[] args) {
        Dog fluffy = new Dog("Fluffy","Maltese",
                "Small",2,"white");

        fluffy.sleep();

        System.out.println();
        System.out.println(fluffy);

        Dog snowball = new Dog(fluffy); //call copy constructor

        System.out.println();
        snowball.name = "Snowball";
        System.out.println(snowball.name);
    }
}
Fluffy is sleeping

Breed is: Maltese
Size is: Small
Age is: 2
Color is: white

Snowball

Attempt 3 - Adding encapsulation

we should not be able to directly change and get properties of the object for example here

public static void main(String[] args) {
        Dog fluffy = new Dog( "Fluffy", "Maltese", "Small", 2, "white");
        fluffy.name = "Snowball";
    }
  • but rather use setters and getters

  • the fields should also be private (can't be accessed outside the class)

so now we have

public class Main {
    public static void main(String[] args) {
        Dog fluffy = new Dog("Fluffy","Maltese","Small",2,"white");

        Dog snowball = new Dog(fluffy); //call copy constructor

        System.out.println();
        snowball.setName("Snowball");
        System.out.println(snowball.getName());
    }
}
Snowball

An array of Dogs 🐶🐩🐕

public class Main {
    public static void main(String[] args) {
        String[] names = {"fluffy", "snowball", "shugi", "cookie"};
        Dog[] dogs = new Dog[4];

        for (int i = 0; i < dogs.length; i++)
            dogs[i] = new Dog(names[i],"Maltese","Small",2,"white");

        for (int i = 0; i < dogs.length; i++)
            System.out.println(dogs[i]);

    }
}
Name : fluffy
Breed is: Maltese
Size is: Small
Age is: 2
Color is: white

Name : snowball
Breed is: Maltese
Size is: Small
Age is: 2
Color is: white

...

Last updated