Object-Oriented Basics
Classes
Blueprints for Objects
You're building a game with many enemies. Each enemy has health, position, and attack methods. Instead of managing separate variables, a class bundles the data and behavior into one reusable blueprint.
Your first class
Define a class with fields and methods.
public class FirstClass {
public static void main(String[] args) {
System.out.println("=== Your First Class ===\n");
// Create an object from the Dog class
Dog myDog = new Dog();
// Set field values
String dogName = ;
int dogAge = ;
myDog.name = dogName;
myDog.breed = "Golden Retriever";
myDog.age = dogAge;
// Read field values
System.out.println("Name: " + myDog.name);
System.out.println("Breed: " + myDog.breed);
System.out.println("Age: " + myDog.age);
// Call methods
System.out.println();
myDog.bark();
myDog.bark();
}
}
// Class definition
class Dog {
// Fields (instance variables)
String name;
String breed;
int age;
// Method
void bark() {
System.out.println(name + " says: Woof!");
}
}
public class FirstClass {
public static void main(String[] args) {
System.out.println("=== Your First Class ===\n");
// Create an object from the Dog class
Dog myDog = new Dog();
// Set field values
String dogName = ;
int dogAge = ;
myDog.name = dogName;
myDog.breed = "Golden Retriever";
myDog.age = dogAge;
// Read field values
System.out.println("Name: " + myDog.name);
System.out.println("Breed: " + myDog.breed);
System.out.println("Age: " + myDog.age);
// Call methods
System.out.println();
myDog.bark();
myDog.bark();
}
}
// Class definition
class Dog {
// Fields (instance variables)
String name;
String breed;
int age;
// Method
void bark() {
System.out.println(name + " says: Woof!");
}
}
public class FirstClass {
public static void main(String[] args) {
System.out.println("=== Your First Class ===\n");
// Create an object from the Dog class
Dog myDog = new Dog();
// Set field values
String dogName = ;
int dogAge = ;
myDog.name = dogName;
myDog.breed = "Golden Retriever";
myDog.age = dogAge;
// Read field values
System.out.println("Name: " + myDog.name);
System.out.println("Breed: " + myDog.breed);
System.out.println("Age: " + myDog.age);
// Call methods
System.out.println();
myDog.bark();
myDog.bark();
}
}
// Class definition
class Dog {
// Fields (instance variables)
String name;
String breed;
int age;
// Method
void bark() {
System.out.println(name + " says: Woof!");
}
}
public class FirstClass {
public static void main(String[] args) {
System.out.println("=== Your First Class ===\n");
// Create an object from the Dog class
Dog myDog = new Dog();
// Set field values
String dogName = ;
int dogAge = ;
myDog.name = dogName;
myDog.breed = "Golden Retriever";
myDog.age = dogAge;
// Read field values
System.out.println("Name: " + myDog.name);
System.out.println("Breed: " + myDog.breed);
System.out.println("Age: " + myDog.age);
// Call methods
System.out.println();
myDog.bark();
myDog.bark();
}
}
// Class definition
class Dog {
// Fields (instance variables)
String name;
String breed;
int age;
// Method
void bark() {
System.out.println(name + " says: Woof!");
}
}
public class FirstClass {
public static void main(String[] args) {
System.out.println("=== Your First Class ===\n");
// Create an object from the Dog class
Dog myDog = new Dog();
// Set field values
String dogName = ;
int dogAge = ;
myDog.name = dogName;
myDog.breed = "Golden Retriever";
myDog.age = dogAge;
// Read field values
System.out.println("Name: " + myDog.name);
System.out.println("Breed: " + myDog.breed);
System.out.println("Age: " + myDog.age);
// Call methods
System.out.println();
myDog.bark();
myDog.bark();
}
}
// Class definition
class Dog {
// Fields (instance variables)
String name;
String breed;
int age;
// Method
void bark() {
System.out.println(name + " says: Woof!");
}
}
public class FirstClass {
public static void main(String[] args) {
System.out.println("=== Your First Class ===\n");
// Create an object from the Dog class
Dog myDog = new Dog();
// Set field values
String dogName = ;
int dogAge = ;
myDog.name = dogName;
myDog.breed = "Golden Retriever";
myDog.age = dogAge;
// Read field values
System.out.println("Name: " + myDog.name);
System.out.println("Breed: " + myDog.breed);
System.out.println("Age: " + myDog.age);
// Call methods
System.out.println();
myDog.bark();
myDog.bark();
}
}
// Class definition
class Dog {
// Fields (instance variables)
String name;
String breed;
int age;
// Method
void bark() {
System.out.println(name + " says: Woof!");
}
}
public class FirstClass {
public static void main(String[] args) {
System.out.println("=== Your First Class ===\n");
// Create an object from the Dog class
Dog myDog = new Dog();
// Set field values
String dogName = ;
int dogAge = ;
myDog.name = dogName;
myDog.breed = "Golden Retriever";
myDog.age = dogAge;
// Read field values
System.out.println("Name: " + myDog.name);
System.out.println("Breed: " + myDog.breed);
System.out.println("Age: " + myDog.age);
// Call methods
System.out.println();
myDog.bark();
myDog.bark();
}
}
// Class definition
class Dog {
// Fields (instance variables)
String name;
String breed;
int age;
// Method
void bark() {
System.out.println(name + " says: Woof!");
}
}
public class FirstClass {
public static void main(String[] args) {
System.out.println("=== Your First Class ===\n");
// Create an object from the Dog class
Dog myDog = new Dog();
// Set field values
String dogName = ;
int dogAge = ;
myDog.name = dogName;
myDog.breed = "Golden Retriever";
myDog.age = dogAge;
// Read field values
System.out.println("Name: " + myDog.name);
System.out.println("Breed: " + myDog.breed);
System.out.println("Age: " + myDog.age);
// Call methods
System.out.println();
myDog.bark();
myDog.bark();
}
}
// Class definition
class Dog {
// Fields (instance variables)
String name;
String breed;
int age;
// Method
void bark() {
System.out.println(name + " says: Woof!");
}
}
public class FirstClass {
public static void main(String[] args) {
System.out.println("=== Your First Class ===\n");
// Create an object from the Dog class
Dog myDog = new Dog();
// Set field values
String dogName = ;
int dogAge = ;
myDog.name = dogName;
myDog.breed = "Golden Retriever";
myDog.age = dogAge;
// Read field values
System.out.println("Name: " + myDog.name);
System.out.println("Breed: " + myDog.breed);
System.out.println("Age: " + myDog.age);
// Call methods
System.out.println();
myDog.bark();
myDog.bark();
}
}
// Class definition
class Dog {
// Fields (instance variables)
String name;
String breed;
int age;
// Method
void bark() {
System.out.println(name + " says: Woof!");
}
}
A class has fields (data) and methods (behavior). Define once, create many objects.
Create objects from a class
Instantiate objects using new.
public class CreateObjects {
public static void main(String[] args) {
System.out.println("=== Creating Multiple Objects ===\n");
// Create first student
Student alice = new Student();
alice.name = "Alice";
alice.grade = 85;
// Create second student
Student bob = new Student();
bob.name = "Bob";
bob.grade = 92;
// Create third student
Student charlie = new Student();
charlie.name = "Charlie";
charlie.grade = 78;
// Display all students
System.out.println("Student Records:");
System.out.println(" " + alice.name + ": " + alice.grade);
System.out.println(" " + bob.name + ": " + bob.grade);
System.out.println(" " + charlie.name + ": " + charlie.grade);
// Each is independent
System.out.println("\nChanging Alice's grade...");
alice.grade = 90;
System.out.println("Alice: " + alice.grade);
System.out.println("Bob: " + bob.grade); // Unchanged!
System.out.println("Charlie: " + charlie.grade); // Unchanged!
}
}
class Student {
String name;
int grade;
}
new ClassName() creates an object. Each object is independent.
Access and modify fields
Read and write object data.
public class AccessFields {
public static void main(String[] args) {
System.out.println("=== Accessing Object Fields ===\n");
Book book = new Book();
// Write to fields
book.title = "1984";
book.author = "George Orwell";
book.pages = 328;
book.isAvailable = true;
// Read from fields
System.out.println("Title: " + book.title);
System.out.println("Author: " + book.author);
System.out.println("Pages: " + book.pages);
System.out.println("Available: " + book.isAvailable);
// Modify fields
System.out.println("\nBorrowing book...");
book.isAvailable = false;
System.out.println("Available: " + book.isAvailable);
// Default values before fields are assigned
System.out.println("\n=== Default Values ===");
Book emptyBook = new Book();
System.out.println("Default title: " + emptyBook.title);
System.out.println("Default pages: " + emptyBook.pages);
System.out.println("Default available: " + emptyBook.isAvailable);
}
}
class Book {
// Different field types
String title; // Reference type (default: null)
String author; // Reference type (default: null)
int pages; // Primitive (default: 0)
boolean isAvailable; // Primitive (default: false)
}
Use dot notation: object.field to access, object.field = value to set.
Multiple instances
Each object has its own field values.
public class MultipleInstances {
public static void main(String[] args) {
System.out.println("=== Multiple Instances Demo ===\n");
// Create bank accounts
BankAccount acc1 = new BankAccount();
acc1.owner = "Alice";
acc1.balance = 1000.0;
BankAccount acc2 = new BankAccount();
acc2.owner = "Bob";
acc2.balance = 500.0;
BankAccount acc3 = new BankAccount();
acc3.owner = "Charlie";
acc3.balance = 2500.0;
// Initial state
System.out.println("Initial balances:");
printAccount(acc1);
printAccount(acc2);
printAccount(acc3);
// Operations on different accounts
System.out.println("\nTransactions:");
acc1.balance -= 200; // Alice withdraws
System.out.println("Alice withdrew $200");
acc2.balance += 100; // Bob deposits
System.out.println("Bob deposited $100");
acc3.balance -= 500; // Charlie withdraws
System.out.println("Charlie withdrew $500");
// Final state
System.out.println("\nFinal balances:");
printAccount(acc1);
printAccount(acc2);
printAccount(acc3);
// Each object maintains its own state!
System.out.println("\n=== Key Point ===");
System.out.println("Three objects, three independent balances!");
System.out.println("Same class (blueprint), different data (state).");
}
static void printAccount(BankAccount acc) {
System.out.println(" " + acc.owner + ": $" + acc.balance);
}
}
class BankAccount {
String owner;
double balance;
}
Changes to one object don't affect others. Each has its own memory.
Methods that use object data
Methods can read and modify the object's fields.
public class ClassWithMethods {
public static void main(String[] args) {
System.out.println("=== Class with Methods ===\n");
Counter counter = new Counter();
counter.display(); // Shows 0 (default)
counter.increment();
counter.increment();
counter.increment();
counter.display(); // Shows 3
counter.decrement();
counter.display(); // Shows 2
counter.reset();
counter.display(); // Shows 0
System.out.println("\n=== Two Independent Counters ===");
Counter counterA = new Counter();
Counter counterB = new Counter();
counterA.increment();
counterA.increment();
counterA.increment();
counterA.increment();
counterA.increment();
counterB.increment();
counterB.increment();
System.out.println("Counter A: " + counterA.getValue());
System.out.println("Counter B: " + counterB.getValue());
}
}
class Counter {
int count = 0; // Field with initial value
void increment() {
count++;
}
void decrement() {
if (count > 0) {
count--;
}
}
void reset() {
count = 0;
}
int getValue() {
return count;
}
void display() {
System.out.println("Count: " + count);
}
}
Methods operate on this object's data. this is implicit.
Exercise: PointRectangle.java
Create Point and Rectangle classes that work together