로그인 회원가입
모두인포
전체IT경제사회생활스포츠시사여행연애

자바 상속(Inheritance)

lmkfox · 2025-06-17 · 조회 0
자바 상속(Inheritance)
1. 상속의 기본 개념 상속은 기존에 정의된 클래스를 바탕으로 새로운 클래스를 정의할 수 있도록 해줍니다. 자식 클래스는 부모 클래스의 모든 멤버 변수와 메서드를 물려받지만, 생성자와 private 멤버는 상속되지 않습니다. class Animal { void eat() { System.out.println("먹는다"); } } class Dog extends Animal { void bark() { System.out.println("짖는다"); } } public class Main { public static void main(String[] args) { Dog dog = new Dog(); dog.eat(); // Animal 클래스에서 상속됨 dog.bark(); // Dog 클래스의 메서드 } } 2. 상속의 문법 자바에서 클래스 상속은 extends 키워드를 사용합니다. class 자식클래스 extends 부모클래스 { // 자식 클래스의 멤버들 } - 단일 상속만 지원 (하나의 부모 클래스만 상속 가능) - 인터페이스를 통해 다중 상속의 효과를 일부 구현할 수 있음 3. 접근 제어자와 상속 관계 부모 클래스의 멤버가 자식 클래스에서 어떻게 접근 가능한지는 접근 제어자에 따라 달라집니다. 접근 제어자 동일 클래스 같은 패키지 자식 클래스 전체 private O X X X default O O O (같은 패키지) X protected O O O X public O O O O 4. 메서드 오버라이딩 (Overriding) 상속을 받은 자식 클래스에서 부모 클래스의 메서드를 재정의할 수 있습니다. 이를 오버라이딩이라고 합니다. class Animal { void sound() { System.out.println("동물이 소리를 낸다"); } } class Cat extends Animal { @Override void sound() { System.out.println("야옹"); } } - @Override 어노테이션을 사용하면 컴파일 타임에 재정의 여부를 체크할 수 있어 안정성이 높아짐 - 오버라이딩한 메서드는 부모 클래스가 아닌 자식 클래스의 메서드가 호출됨 5. super 키워드 supper는 부모 클래스의 생성자나 멤버에 접근할 때 사용합니다. 5-1. 부모 생성자 호출 자식 클래스 생성자에서 부모 클래스 생성자를 명시적으로 호출할 수 있습니다. class Animal { Animal(String name) { System.out.println("동물 이름: " + name); } } class Dog extends Animal { Dog() { super("바둑이"); // 부모 생성자 호출 } } 5-2. 부모 메서드 호출 class Animal { void eat() { System.out.println("동물이 먹는다"); } } class Dog extends Animal { void eat() { super.eat(); // 부모 클래스의 eat() 호출 System.out.println("개가 사료를 먹는다"); } } 6. 생성자와 상속 - 생성자는 상속되지 않지만, 자식 클래스 생성자 내에서 부모 클래스의 생성자를 반드시 호출해야 함 - 명시하지 않으면 컴파일러가 super()를 자동으로 추가 - 부모 클래스에 기본 생성자가 없고 매개변수가 있는 생성자만 존재할 경우, 자식 클래스에서 super(인자)를 반드시 명시적으로 호출해야 함 7. final 키워드와 상속 제한 - final class: 상속이 불가능한 클래스 - final method: 자식 클래스에서 오버라이딩 불가능한 메서드 final class Vehicle { } // class Car extends Vehicle { } // 컴파일 오류 class Shape { final void draw() { System.out.println("그리기"); } } 8. 상속의 장점과 단점 장점 - 코드 재사용 가능 - 유지보수가 쉬움 - 프로그램의 구조가 계층적으로 정리됨 단점 - 잘못된 상속 구조는 코드 복잡성 증가 - 상위 클래스에 의존하게 되어 유연성이 낮아질 수 있음 - 오용 시 코드 품질 저하 가능 9. 예제: 상속과 오버라이딩 활용 class Person { String name; void introduce() { System.out.println("안녕하세요. 제 이름은 " + name + "입니다."); } } class Student extends Person { String school; @Override void introduce() { System.out.println("안녕하세요. 학생입니다. 이름은 " + name + ", 학교는 " + school + "입니다."); } }

댓글

아직 댓글이 없습니다.

로그인 후 댓글을 남길 수 있습니다.