상속
- 부모 클래스는 자식 클래스에게 상속을 해줄 수 있습니다.
- 자식 클래스는 부모 클래스를 선택해서, 그 부모의 멤버를 상속받아 그대로 쓸 수 있게 됩니다.
// 상위 클래스 정의
class Animal {
void sound() {
System.out.println("Animal makes a sound");
}
}
// 상위 클래스를 확장한 하위 클래스
class Dog extends Animal {
void sound() {
System.out.println("Dog barks"); // 상위 클래스의 메서드를 재정의
}
}
✋ 상속 사용하는 이유
▶ 코드의 재사용성과 유지보수성을 높이는데 큰 역할
📌 상속 특징
- 재사용성
- 부모 클래스에서 정의된 속성과 메서드를 자식클래스에서 재사용 - 확장성
- 자식 클래스는 부모 클래스의 특성을 그대로 상속 받으면서 추가적인 메서드를 재정의 - 다형성
- 부모 클래스 타입으로 선언된 변수에 자식 클래스의 객체를 할당하여 다양한 객체를 동일한 타입 형성 - 계층구조
- 상속을 통해 부모 클래스와 그 자식 클래스들을 계층적으로 구조화
ex)
class Parent {
String name;
// 부모 클래스의 생성자
Parent() {
this.name = "Parent";
}
// 부모 클래스의 메서드
void displayParent() {
System.out.println("Parent name: " + name);
}
}
class Child extends Parent {
String message;
// 자식 클래스의 생성자 (기본 생성자)
Child() {
this.message = "Hello";
}
// 자식 클래스의 생성자 (매개변수를 받는 생성자)
Child(String name, String message) {
this.name = name; // 부모 클래스의 필드에 직접 접근하여 설정
this.message = message;
}
// 자식 클래스의 메서드
void displayChild() {
System.out.println("Child name: " + name);
System.out.println("Child message: " + message);
}
}
// 사용 예시
public class Main {
public static void main(String[] args) {
// 부모 클래스의 생성자를 자동으로 호출하여 초기화
Child child1 = new Child();
child1.displayParent();
child1.displayChild();
// 매개변수를 받는 생성자를 사용하는 경우
Child child2 = new Child("Alice", "Hi");
child2.displayParent();
child2.displayChild();
}
}
출력)
더보기
Parent name: Parent
Child name: Parent
Child message: Hello
Parent name: Alice
Child name: Alice
Child message: Hi
✅ super()
- 부모클래스 생성 : class A
- 자식클래스 생성 : class B extends A
❗ 모든 상속을 받은 클래스 생성자에는 super()가 생략!
기본 생성자만 사용할 때는 오류가 나지 않다가 다른 생성자를 생성하면서 오류가 발생
▶ 부모꺼를 상속 시 자식 클래스에서 생성자 super() 생성 필수
super() : 자신의 부모클래스의 생성자
this() : 자기 자신 클래스의 생성자 - 부모 클래스에서는 자식 클래스의 내용에 접근 x
자식 클래스에서는 부모 클래스의 멤버변수,메서드에 접근 o
ex)
class Parent {
String name;
// 기본 생성자
Parent() {
this.name = "Parent";
}
// 매개변수를 받는 생성자
Parent(String name) {
this.name = name;
}
}
class Child extends Parent {
String message;
// 기본 생성자를 사용하는 경우
Child() {
// 부모 클래스의 기본 생성자 호출
super();
this.message = "Hello";
}
// 매개변수를 받는 생성자를 사용하는 경우
Child(String name, String message) {
// 부모 클래스의 매개변수를 받는 생성자 호출
super(name);
this.message = message;
}
}
public class Main {
public static void main(String[] args) {
// 기본 생성자를 사용하는 경우
Child child1 = new Child();
System.out.println("Child name: " + child1.name);
System.out.println("Child message: " + child1.message);
// 매개변수를 받는 생성자를 사용하는 경우
Child child2 = new Child("Alice", "Hi");
System.out.println("Child name: " + child2.name);
System.out.println("Child message: " + child2.message);
}
}
출력)
더보기
Child name: Parent
Child message: Hello
Child name: Alice
Child message: Hi
[JAVA/JAVA] - [JAVA 기초 이론] 인터페이스 / 추상 클래스 / 상속 비교 정리
[JAVA 기초 이론] 인터페이스 / 추상 클래스 / 상속 비교 정리
인터페이스 (Interface) 인터페이스는 클래스에 대한 약속을 정의합니다. 클래스가 해당 인터페이스를 구현하면 인터페이스에 정의된 모든 메서드를 반드시 구현해야 합니다. // 인터페이스 정의 i
coding-bird.tistory.com
'Language > JAVA' 카테고리의 다른 글
[JAVA 기초 이론] 추상클래스 abstract (0) | 2023.05.19 |
---|---|
[JAVA 기초 이론] 캡슐화 private / getter / setter (0) | 2023.05.18 |
[JAVA 기초 이론] 멤버변수 static (0) | 2023.05.18 |
[JAVA 기초 이론] 컬렉션 프레임워크: 배열리스트 (0) | 2023.05.18 |
[JAVA 기초 이론] 스캐너 Scanner (0) | 2023.05.11 |