JAVA - 상속

석재호·2022년 1월 31일
0

JAVA

목록 보기
6/12
post-thumbnail

객체지향 언어의 특징 (OOP)

  • Abstraction(추상화)
  • Polymorphism(다형성)
  • Interitance(상속)
  • Encapsulation(데이터 은닉과 보호)

상속 (Interitance)

  • 기존 클래스의 멤버를 자식 클래스에서 재사용하기 위한 것
    • 부모의 생성자와 초기화 블록은 상속하지 않는다.
  • 기존 클래스의 멤버를 물려 받기 때문에 코드의 절감
    • 부모의 코드를 변경하면 모든 자식들에게도 적용되어 유지 보수성이 향상
  • 상속의 적용
    • extends 키워드 사용
    	public class Animal{
        	String name;
            
            void eat(){}
            void walk(){}
        }
        
        public class Dog extends Animal{
        	String bark(){}
        }
  • Object class
    • 모든 클래스의 조상 클래스
    • 별도의 extends 선언이 없는 클래스들은 extends Object가 생략
    • 따라서 모든 클래스에는 Object 클래스에 정의된 Method 사용가능
      ex) toString(), equals(), hashCode()
  • Java는 단일 상속만을 지원
    • 포함 관계
      • 2개 이상의 클래스에서 특성을 가져올 경우, 하나는 상속, 나머지는 멤버 변수로 처리
      • 상속은 is a, 포함은 has a
  • Method Overriding
    • 조상 클래스에 정의된 Method를 자식 클래스에서 적합하게 재정의 하는것
    • 조건
      • Method의 이름이 같아야 한다.
      • 매개 변수의 개수, 타입, 순서가 같아야 한다.
      • 리턴 타입이 같아야 한다.
      • 접근 제한자는 부모보다 범위가 넓거나 같아야 한다.
      • 조상보다 더 큰 예외를 던질 수 없다.
    • 추가 지식
      • Annotation
        • 컴파일러, JVM, 프레임워크 등이 보는 주석
        • 소스코드에 메타 데이터를 삽입하는 형태
          • 소스 코드에 붙여 놓는 라벨
          • 코드에 대한 정보 추가
        • example
          • @Deprecated : 컴파일러에게 해당 Method가 deprecated 되었다고 알림
          • @Override : 컴파일러에게 해당 Method는 Override했다고 알림
          • @SuppressWarnings : 컴파일러에게 사소한 warning인 경우 신경쓰지 말라고 알림
  • super
    • this를 통해 멤버에 접근하듯이 super를 통해 조상 클래스 멤버 접근
      • 조상 클래스에 선언된 멤버들은 조상 클래스의 생성자에서 초기화가 이뤄지므로 이를 재활용
      • 자식 클래스에 선언된 멤버들만 자식 클래스 생성자에서 초기화
    • super()는 자식 클래스 생성자의 맨 첫줄에서만 호출 가능
      • 생성자의 첫 줄에서만 this() 또는 super()가 올 수 있다.
    • 명시적으로 this()또는 super()를 호출하지 않는 경우 컴파일러가 super() 삽입
      • 결론적으로 최상위 Object까지 객체가 다 만들어짐
profile
개발자 준비 중

0개의 댓글