본문 바로가기
SSAFY/Daily

20220120 JAVA 생성자 및 상속

by Hunveloper 2022. 1. 20.
728x90

상속

  기존 클래스의 자산(멤버)을 자식 클래스에서 재사용하기 위한 것 ( 부모의 생성자와 초기화 블록은 상속 X)

  코드의 절감 → 부모의 코드 변경시 모든 자식들에게도 적용 → 유지 보수성 향상

  상속의 적용 : extends 키워드 사용

    항상 모든 클래스는 extends명령어를 사용하지 않으면 default로 Object를 상속한다.

  상속의 관계

    Person is a Object ( 상속의 관계는 is a 관계라고 함)

  단일 상속 (Single Inheritance)

    다중 상속의 경우 여러 클래스의 기능을 물려받을 수 있으나 관계가 매우 복잡해짐(다이아몬드 상속),

    자바는 단일 상속만 지원

  포함 관계

    상속 이외에 클래스를 재활용 하는 방법

      2개 이상의 클래스에서 특성을 가져 올 때 하나는 상속, 나머지는 멤버 변수로 처리

    SpiderMan has a Spider

  매서드 오버라이딩 ( Overriding)

    조상 클래스에 정의된 메서드를 자식 클래스에서 적합하게 수정하는 것

    오버라이딩의 조건

      1. 메서드의 이름이 같아야함

      2. 매개 변수의 개수, 타입, 순서가 같아야함

      3. 리턴 타입 동일

  Annotation

    소스 코드에 붙여 놓은 라벨

    @override : override실패시 오류 메세지 출력

  Object 클래스

    가장 최상위 클래스로 모든 클래스의 조상

    toString 메서드

      객체를 문자열로 변경하는 메서드 → @override를 이용해서 멤버출력

    equals 메서드

      객체의 주소 비교 : == 이용

      객체의 내용 비교 : equals 재정의

    super 키워드

      super를 통해 조상 클래스 멤버에 접근

      super( ) : 조상 클래스의 생성자 호출

      명시적으로 this( ) or super( )를 호출하지 않으면 컴파일러가 super( ) 삽입

    변수의 scope

      사용된 위치에서 점점 확장해가며 처음 만난 선언부에 연결

      method 내부 → 해당 클래스 멤버 변수 → 조상 클래스 멤버 변수

 

  제한자

    public, protected, private 등

    static : 클래스 레벨의 요소 설정

    final

      final class : 더 이상 확장 할 수 없음 (상속 금지) → 오버라이드 방지

      final method : 더 이상 재정의 할 수 없음 : overriding 금지

      final variable : 상수화

    접근 제한자

      public, protected, package, private

 

OOP is A PIE (Object-Oriented Programming is Abstraction, Polymorphism, Inheritance, Encapsulation)

 

데이터의 은닉과 보호 ( Encapsulation )

  변수는 private로 선언

  Setter / Getter를 이용해 변수 설정 및 이용

 

다형성 ( Polymorphism )

  하나의 객체가 많은 형(타입)을 가질 수 있는 성질

  다른 타입의 객체를 다루는 배열을 Object로 담을 수 있음 ( 모든 클래스는 Object를 상속함)

  기본형도 담을 수 있음 ( autoboxing )

  매개 변수의 다형성

 

  참조형 객체의 형 변환

    Child에서 Super로 → 묵시적 형 변환

    Super에서 Child로 → 명시적 형 변환

 

  동적바인딩

class SuperClass{
    String x = "super"
    public void method()
    sysout("Super")
}

class SubClass extends SuperClass{
    String x = "sub"

    @ Override
    public void method()
    	sysout("Sub")
}

public class MemberBindingTest{
    public static void main(String[] args) {
        SubClass subClass = new SubClass()
        System.out.println = new SubClass()       // sub
        subClass.method()       // Sub

        SuperClass superClass = subClass
        System.out.println(superClass.x)       // super
        superClass.method()        // Sub
    }
}

 

동적바인딩 : 자식에서 오버라이딩 된 메소드가 있다면 그것을 사용함.

 

리뷰

  객체지향 → 클래스를 이용하여 추상화

  UML : Unified Modeling Language

  클래스 : 설계도

    속성(static 전역, instance 기본형, final 변경불가),

    기능==Method (생성자, 일반)

  클래스에 의해서 객체가 생성됨

  클래스 조립(협업) : 상속 ( Is A - extends(단일 상속), Has A - composited, associated)

 

  생성자의 궁극적 목적 : 인스턴스 변수를 초기화

  생성자는 상속되지 않음!

 

  Example)

  public class 클래스이름A{

    자료형 변수명; // 자료형 ⇒ int, char 등 → 기본형, Action 등 사용자 지정형태 → 참조형

    

    public 클래스이름A( ){

    }

    public 클래스이름A( 자료형 변수명 ){ // 생성자의 오버로드

    }

  }

  public class 클래스이름B extends 클래스이름A{

    자료형 변수명;

    public 클래스이름B( ){

    }

    public 클래스이름B(자료형 변수명){

    }

  }

 

  this 생성자는 첫 줄에서만 호출 가능

728x90
728x90

'SSAFY > Daily' 카테고리의 다른 글

20220126 JAVA I/O & Stream  (0) 2022.02.04
20220125 JAVA 예외처리  (0) 2022.02.04
20220124 JAVA 추상클래스  (0) 2022.02.04
20220118 JAVA 객체지향 프로그래밍  (0) 2022.01.18
20220117 JAVA 기초수업  (0) 2022.01.17

댓글