sussa
컴퓨터가 할 일은 컴퓨터가.
sussa
전체 방문자
오늘
어제

블로그 메뉴

    • 분류 전체보기 (58)
      • Language (58)
        • JAVA (58)

    공지사항

    인기 글

    태그

    • 웹개발종합반
    • 개발자
    • tree
    • 최종연산
    • java
    • binaryTree
    • 상속
    • CSS
    • recursion
    • Method
    • inheritance
    • 캡슐화
    • HTML
    • 다형성
    • singleton
    • Class
    • 스파르타코딩클럽
    • Algorithm
    • 자료구조
    • Database
    • BinarySearchTree
    • Instance
    • spring
    • Til
    • Thread
    • DI
    • Stream
    • 조건문
    • Web
    • 재귀

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    sussa

    컴퓨터가 할 일은 컴퓨터가.

    Java Class의 Inheritance(상속) / Composite(포함) - OOP_상속
    Language/JAVA

    Java Class의 Inheritance(상속) / Composite(포함) - OOP_상속

    2022. 8. 20. 23:58

    💻 Java Inheritance(상속) / Composite(포함)

    🎯 목표 :  클래스의 상속과 포함관계를 이해

    📒 Inheritance 상속 

    ❗특징

    1. 상속받은 자식클래스는 부모클래스의 모든 멤버를 상속 받는다. 단, 생성자, 초기화 블럭은 제외한다.
    2. 자식클래스는 부모클래스의 멤버 갯수보다 같거나 많다.
    3. 상속은 단일 상속만 허용한다. (여러 부모클래스는 허용안됨)
    4. extends 키워드를 사용하여 자식 클래스를 생성할수 있다.
    5. 상속 받은 클래스가 없는 모든 클래스는 Object 클래스를 상속 받는다.

    👉 클래스의 상속 예제

    • 상속은 extends 키워드를 사용한다.
    • 부모클래스와 자식클래스의 메소드명이 같을수 있다(Overriding), 하지만 여기서 자식 클래스의 오버라이딩된 메소드는 부모클래스의 메소드 기능을 포함하거나 확장되어야 한다.
    • Cycle 클래스의 type 메소드를 보면, super.를 이용하여 부모 클래스의 참조변수 역할을 한다.
    • 자식 클래스 type 메소드의 기능은 같은 이름의 부모클래스 메소드 기능을 포함하고 있다.
    • 오버라이딩 된 자식 메소드의 선언부는 부모메소드와 같아야한다.
    • 생성자는 상속되지 않기 때문에 자식클래스의 생성자를 생성해줘야되며, 자식클래스의 생성자는 부모클래스의 생성자를 포함하여야된다.
    • 자식클래스의 생성자도 부모클래스의 생성자를 포함하여 오버로딩(Overloading) 할수 있다.
    class CycleProto { //Parents Class
    
        int tire;
        String body;
        String handle;
    
        CycleProto (int tire, String body, String handle) {
            this.tire = tire;
            this.body = body;
            this.handle = handle;
        }
        void type () {
            System.out.println(tire+"개의 타이어");
            System.out.println(body +"타입의 바디");
            System.out.println(handle+"타입의 핸들");
        }
    }
    class Cycle extends CycleProto { // Child Class
         String brake;
    
        Cycle(int tire, String body, String handle) {
            super(tire, body, handle); // 상속받은 클래스는 부모클래스의 생성자를 포함하여야한다.
        }
        Cycle(int tire, String body, String handle, String brake) {
            // 상속받은 클래스도 생성자를 오버로딩 할수있다
            super(tire, body, handle);
            this.brake = brake;
    
        }
        void upgradebrake (String brake) {
            this.brake = brake;
        }
        void type() {
            // 상속 클래스의 오버라이드는 부모의 메소드 기능을 포함하고 확장되어야한다
            super.type();
            if (this.brake != null) {
                System.out.println(brake+"타입의 브레이크");
            }
        }
    }

    📒 Composite 포함 

    ❗특징

    1. 클래스 내의 객체 참조변수를 선언하여 다른 클래스를 멤버로 만든다.
    2. 작은단위의 클래스를 만들어 조합하여 클래스를 만든다. = 복잡도가 개선됨.
    3. 객체를 생성할때 참조변수 선언만 해서는 안되고 초기화를 반듯이 해야된다.
    4. 참조변수 선언시 초기화가 생략된다면 생성자를 만들어 초기화 해준다.

    👉 클래스의 포함 예제

    • Motorcycle 클래스에서 Cycle 클래스를 포함하기위해 참조변수 cy를 선언하여 Cycle 클래스를 초기화 한다.
    • Motorcycle 클래스 내에서 Cycle 클래스에 정의된 type메소드를 참조변수를 호출하여 사용할수 있으며, 같은 이름의 메소드도 Motorcycle 클래스의 소속으로 정의 가능하다.
    • Motorcycle 클래스에서 Cycle클래스의 객체를 생성할때 일반적인 객체 생성과 같이 초기화를 해준다.
    class Motorcycle {
        String engine;
        Cycle cy = new Cycle();// 클래스 포함으로 참조변수 생성
        Motorcycle(int tire, String body, String handle, String brake, String engine) {
            cy.tire = tire;
            cy.body = body;
            cy.handle = handle;
            cy.brake = brake;
            this.engine = engine;
        }
        void type() {
            cy.type();
            if (this.engine != null) {
                System.out.println(engine + "타입의 엔진");
            }
        }
    }
    class Cycle extends CycleProto { // Child Class
         String brake;
        Cycle() {
            super();
        }
        
        Cycle(int tire, String body, String handle) {
            super(tire, body, handle); // 상속받은 클래스는 부모클래스의 생성자를 따라야된다
        }
        
        Cycle(int tire, String body, String handle, String brake) {
            // 상속받은 클래스도 생성자를 오버로딩 할수있다
            super(tire, body, handle);
            this.brake = brake;
    
        }
        void upgradebrake (String brake) {
            this.brake = brake;
        }
        
        void type() {
            // 상속 클래스의 오버라이드는 부모의 메소드 기능을 포함하고 확장되어야한다
            super.type();
            if (this.brake != null) {
                System.out.println(brake+"타입의 브레이크");
            }
        }
    }

    'Language > JAVA' 카테고리의 다른 글

    Java super. / super() - OOP_상속  (0) 2022.08.21
    Java Overriding(오버라이딩) - OOP_상속  (0) 2022.08.21
    Java Initialized(초기화)  (0) 2022.08.20
    Java this(생성자, 참조변수)-OOP  (0) 2022.08.20
    Java 생성자(Constructor)- OOP  (0) 2022.08.20
      'Language/JAVA' 카테고리의 다른 글
      • Java super. / super() - OOP_상속
      • Java Overriding(오버라이딩) - OOP_상속
      • Java Initialized(초기화)
      • Java this(생성자, 참조변수)-OOP
      sussa
      sussa
      Efforts to take on a challenge

      티스토리툴바