오버 라이딩이란?
상속 받은 메소드를 재정의 하는 것입니다. 오버라이딩을 하면 코드의 재사용성과 확장성이 높아집니다.
오버 라이딩 예시
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 |