Language/JAVA

[JAVA 기초 이론] 상속 extends

오류나면꽥꽥 2023. 5. 18. 16:29

상속

 

  • 부모 클래스는 자식 클래스에게 상속을 해줄 수 있습니다.
  • 자식 클래스는 부모 클래스를 선택해서, 그 부모의 멤버를 상속받아 그대로 쓸 수 있게 됩니다.
// 상위 클래스 정의
class Animal {
    void sound() {
        System.out.println("Animal makes a sound");
    }
}

// 상위 클래스를 확장한 하위 클래스
class Dog extends Animal {
    void sound() {
        System.out.println("Dog barks"); // 상위 클래스의 메서드를 재정의
    }
}

 

 

 

 

 

 

✋ 상속 사용하는 이유

 

코드의 재사용성과 유지보수성을 높이는데 큰 역할

 

 

 

 

 

 

📌 상속 특징

 

  1. 재사용성
    - 부모 클래스에서 정의된 속성과 메서드를 자식클래스에서 재사용

  2. 확장성
    - 자식 클래스는 부모 클래스의 특성을 그대로 상속 받으면서 추가적인 메서드를 재정의

  3. 다형성
    - 부모 클래스 타입으로 선언된 변수에 자식 클래스의 객체를 할당하여 다양한 객체를 동일한 타입 형성

  4. 계층구조
    - 상속을 통해 부모 클래스와 그 자식 클래스들을 계층적으로 구조화

 

 

 

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()

 

  1. 부모클래스 생성 : class A

  2.  자식클래스 생성 : class B extends A

    모든 상속을 받은 클래스 생성자에는  super()가 생략!

    기본 생성자만 사용할 때는 오류가 나지 않다가 다른 생성자를 생성하면서 오류가 발생

    ▶ 부모꺼를 상속 시 자식 클래스에서 생성자 super() 생성 필수

    super() : 자신의 부모클래스의 생성자

    this() : 자기 자신 클래스의 생성자

  3. 부모 클래스에서는 자식 클래스의 내용에 접근 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