Java

오버라이딩의 응용

오개발 2024. 10. 16. 21:17

오버 라이딩이란?

 상속 받은 메소드를 재정의 하는 것입니다. 오버라이딩을 하면 코드의 재사용성과 확장성이 높아집니다.

 

오버 라이딩 예시

 

class Animal {
    public void makeSound() {
        System.out.println("Animal sound");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Bark");
    }
}

 

위 코드에서 Dog 클래스는 Animal 클래스를 상속받아 makeSound 메소드를 재정의했습니다. 이를 통해 Dog 클래스는 자신에게 맞는 소리를 낼 수 있습니다.

 


 

 

응용하기

 

class Parent {
    public Parent() {
        System.out.println("Parent class constructor");
    }
}

class Child extends Parent {
    public Child() {
        super();  // 부모 클래스의 기본 생성자 호출
        System.out.println("Child class constructor");
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();  // 생성자 호출
    }
}

 

 

출력 결과

 

Parent class constructor
Child class constructor

 

 

여기서 super() 함수는 부모 클래스의 맴버에 접근 할떄 사용됩니다.

 

 

응용2 ( 로깅 기능 )

 

class UserService {
    public void login(String username) {
        System.out.println(username + " has logged in.");
    }
}

class LoggingUserService extends UserService {
    @Override
    public void login(String username) {
        // 로그인 전 로그 기록
        System.out.println("Logging: " + username + " attempts to log in.");
        // 부모 클래스의 기본 로그인 기능 호출
        super.login(username);
    }
}

public class Main {
    public static void main(String[] args) {
        UserService userService = new LoggingUserService();
        userService.login("user123");
    }
}

 

 

출력

Logging: user123 attempts to log in.
user123 has logged in.

 

 

응용3  (상속된 메서드의 조건 변경 )

 

class Document {
    public void open() {
        System.out.println("Opening the document...");
    }

    public void save() {
        System.out.println("Saving the document...");
    }
}

class SecureDocument extends Document {
    private boolean isAuthenticated = false;

    public void authenticate() {
        isAuthenticated = true;
    }

    @Override
    public void open() {
        if (isAuthenticated) {
            super.open();
        } else {
            System.out.println("Access denied. Please authenticate first.");
        }
    }
}

public class Main {
    public static void main(String[] args) {
        SecureDocument secureDoc = new SecureDocument();
        secureDoc.open();  // 인증 없이 호출
        secureDoc.authenticate();  // 인증 후
        secureDoc.open();  // 인증 후 다시 호출
    }
}

 

 

 

출력

Access denied. Please authenticate first.
Opening the document...

'Java' 카테고리의 다른 글

시멘틱 버저닝  (0) 2024.10.18
상속보다 컴포지션(조합)을 사용하라  (0) 2024.10.17
테스트 코드 커버리지  (0) 2024.10.16
자바 default 접근 제어자  (0) 2024.10.16
컴파일 타임과 런타임의 차이  (0) 2024.10.10