</>

Technology

Core Java

Difficulty

Beginner

Interview Question

What is the this and super keyword in Java?

Answer

this and super Keywords in Java

this — Current Object Reference

Refers to the current class instance. Used to distinguish instance variables from local variables, call other constructors, and pass current object as argument.

1. Distinguish instance vs local variable

Java
public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;  // this.name = instance variable
        this.age  = age;   // age (right side) = parameter
    }
}

2. Call another constructor — this()

Java
public class Car {
    String brand;
    String color;
    int speed;

    public Car() {
        this("Toyota", "White", 0); // calls 3-arg constructor
    }

    public Car(String brand) {
        this(brand, "Black", 0);    // calls 3-arg constructor
    }

    public Car(String brand, String color, int speed) {
        this.brand = brand;
        this.color = color;
        this.speed = speed;
    }
}

3. Pass current object to method

Java
public class Builder {
    private String name;

    public Builder setName(String name) {
        this.name = name;
        return this;  // return current object — enables method chaining
    }

    public Builder setAge(int age) { return this; }
    public User build() { return new User(this); }
}

// Method chaining
User user = new Builder()
    .setName("Alice")
    .setAge(30)
    .build();

super — Parent Class Reference

Refers to the immediate parent class. Used to access parent fields, methods, and constructors.

1. Call parent constructor — super()

Java
class Animal {
    String name;
    Animal(String name) {
        this.name = name;
        System.out.println("Animal created: " + name);
    }
}

class Dog extends Animal {
    String breed;

    Dog(String name, String breed) {
        super(name);       // MUST be first statement — calls Animal()
        this.breed = breed;
        System.out.println("Dog created: " + breed);
    }
}

2. Access overridden parent method

Java
class Shape {
    public void draw() {
        System.out.println("Drawing a shape");
    }
}

class Circle extends Shape {
    @Override
    public void draw() {
        super.draw();                  // calls Shape.draw() first
        System.out.println("Drawing a circle");
    }
}

3. Access parent field (when hidden by child)

Java
class Parent {
    int x = 10;
}

class Child extends Parent {
    int x = 20;  // hides parent x

    void display() {
        System.out.println(x);       // 20 — child's x
        System.out.println(super.x); // 10 — parent's x
    }
}

In Automation (Page Object Model)

Java
public class BasePage {
    protected WebDriver driver;
    protected WebDriverWait wait;

    public BasePage(WebDriver driver) {
        this.driver = driver;        // this = current BasePage instance
        this.wait   = new WebDriverWait(driver, Duration.ofSeconds(10));
        PageFactory.initElements(driver, this);  // pass this object
    }

    public void waitForElement(By locator) {
        wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
    }
}

public class LoginPage extends BasePage {
    @FindBy(id = "username") WebElement usernameField;
    @FindBy(id = "password") WebElement passwordField;

    public LoginPage(WebDriver driver) {
        super(driver);  // super = BasePage constructor
    }

    public void login(String user, String pass) {
        super.waitForElement(By.id("username")); // parent method
        usernameField.sendKeys(user);
        passwordField.sendKeys(pass);
    }
}

Follow AutomateQA

Related Topics