
상속(inheritance)은 객체 지향 프로그래밍의 핵심 개념 중 하나로, 기존 클래스의 특성을 새로운 클래스가 물려받아 사용하는 메커니즘입니다.
상속은 코드의 재사용성을 높이고 프로그램의 구조를 체계화하는 데 중요한 역할을 합니다.

1. 상속의 개념
기존 클래스(부모 클래스)의 필드와 메소드를 새로운 클래스(자식 클래스)가 물려받아 사용합니다.
부모 클래스는 상위 클래스, 기초 클래스로도 불립니다.
자식 클래스는 하위 클래스, 파생 클래스로도 불립니다.
2. 상속의 장점
코드 재사용성 향상: 기존 클래스의 기능을 재활용할 수 있습니다.
중복 코드 감소: 공통 특성을 부모 클래스에 작성하여 자식 클래스에서 중복을 피할 수 있습니다.
계층적 구조 형성: 클래스 간의 관계를 체계적으로 구성할 수 있습니다1.
3. 상속의 구현
Java에서는 'extends' 키워드를 사용하여 상속을 구현합니다.
class 자식클래스 extends 부모클래스 { // 자식 클래스의 추가적인 멤버 } |
4. 상속의 특징
- 자식 클래스는 부모 클래스의 public과 protected 멤버에 접근할 수 있습니다.
- private 멤버는 상속되지만 직접 접근할 수 없습니다.
- Java에서 모든 클래스는 자동으로 Object 클래스를 상속받습니다.
5.예시
1) 예시
// Parent / Chlid 상속 진행



// 상속 받을때 사용하는 키워드 extends 입니다.
// extends 오른쪽에, 상속받을 클래스명을 딱1개만 사용가능합니다.
// 맴버변수와 매소드 모두 눈에 안보이지만, 상속받은것 입니다.
// 상속받았다는것은, 이 클래스에서 바로 이용이 가능하다는것 입니다.

Parent 클래스에서
// 이름
// String name;
// 나이
// int age;
// 보유자산(돈)
// int money;
위의 맴버 변수를 상속받을 수 있습니다.


취미는 프린트가 되지 않았습니다. 프린트를 해보겠습니다.
1) 메서드 오버라이딩(Method Overriding)
객체 지향 프로그래밍에서 상속 관계에 있는 부모 클래스의 메서드를 자식 클래스에서 재정의하여 사용하는 것을 의미합니다.


더욱더 간단하게 위와같이 진행할 수 있습니다.

2) 예시
다음을 구현하세요.
public class User {
protected String username;
protected String email;
public User(String username, String email) {
// username과 email을 초기화
}
public void displayInfo() {
// username과 email을 출력
// 예: "사용자: [username], 이메일: [email]"
}
}
public class Customer extends User {
private int loyaltyPoints;
public Customer(String username, String email) {
// 부모 클래스의 생성자 호출
// loyaltyPoints를 0으로 초기화
}
@Override
public void displayInfo() {
// 부모 클래스의 displayInfo() 메서드 호출
// loyaltyPoints 정보 추가 출력
// 예: "적립 포인트: [loyaltyPoints]"
}
public void addPoints(int addPoints) {
// loyaltyPoints에 points를 더함
// 적립 완료 메시지 출력
}
}
public class Admin extends User {
private String role;
public Admin(String username, String email, String role) {
// 부모 클래스의 생성자 호출
// role 초기화
}
@Override
public void displayInfo() {
// 부모 클래스의 displayInfo() 메서드 호출
// role 정보 추가 출력
// 예: "역할: [role]"
}
public void manageService() {
// "관리자 [username]이(가) [role] 서비스를 관리합니다." 메시지 출력
}
}
public class Main {
public static void main(String[] args) {
// Customer 객체 생성
// Customer의 displayInfo() 메서드 호출
// Customer의 addPoints() 메서드 호출
// Customer의 displayInfo() 메서드 다시 호출하여 포인트 증가 확인
// Admin 객체 생성
// Admin의 displayInfo() 메서드 호출
// Admin의 manageService() 메서드 호출
}
}

import entety.Admin; import entety.Customer; public class Mail { public static void main(String[] args) { // Customer 객체 생성 Customer c1 = new Customer("홍길동","abc@gmail.com"); // Customer의 displayInfo() 메서드 호출 c1.displayInfo(); // Customer의 addPoints() 메서드 호출 c1.addPoints(500); // Customer의 displayInfo() 메서드 다시 호출하여 포인트 증가 확인 c1.displayInfo(); // Admin 객체 생성 Admin a1 = new Admin("김나나","aaa@naver.com"); // Admin의 displayInfo() 메서드 호출 a1.displayInfo(); // Admin의 manageService() 메서드 호출 a1.manageService(); } } |

package entety; public class User { protected String username; protected String email; public User(String username, String email) { this.username = username; this.email = email; } public void displayInfo() { System.out.println("사용자: " + username + ", 이메일 : "+ email); } } |

package entety; public class Customer extends User{ private int loyaltyPoints; public Customer(String username, String email) { super(username, email); loyaltyPoints = 0; } @Override public void displayInfo() { super.displayInfo(); System.out.println("적립 포인트: "+ loyaltyPoints); } public void addPoints(int points) { loyaltyPoints = loyaltyPoints + points; System.out.println("추가적립이 완료되었습니다. "); } } |

package entety; public class Admin extends User { private String role; public Admin(String username, String email) { super(username, email); role = "관리자"; } @Override public void displayInfo() { super.displayInfo(); System.out.println("역할: "+ role); } public void manageService() { System.out.println("관리자 "+ username+ "이(가)" +role + "서비스를 관리합니다." ); } } |

super는 User(생성자) 를 나타냅니다.

'JAVA > 이론' 카테고리의 다른 글
31. [ JAVA ] 상속 : 추상클래스(abstract class) (0) | 2024.12.16 |
---|---|
30. [ JAVA ] 상속 : 직속 (0) | 2024.12.16 |
26. [ JAVA ] 메소드 오버로딩 (Method Overloading) (1) | 2024.12.12 |
25. [ JAVA ] Gette/ Setter 의미와 사용 이유 (0) | 2024.12.12 |
22. [ JAVA ] 클래스(Class)와 객체(Instance) (0) | 2024.12.10 |