JAVA

[JAVA]13.상속

CodeJaram 2023. 6. 12. 08:12

● 상속의 특성

부모클래스의 메소드를 자손 클래스에서 이어받아 사용할 수 있다.

 

부모클래스의 메소드

================

자손클래스의 메소드

1. 자바상속의 특징

 1)다중상속을 지원하지 않는다.(부모 클래스가 여러개일 수 없다)

  예)GamingMouse extends Mouse, WheelMouse (x)

 

 2)상속의 횟수에 제한을 두지 않는다(부모 클래스에 자손클래스가 여러 개 있을수 있다).

   예)GamingMouse extends WheelMouse

    ->Mouse를 상속받은 WheelMouse를 상속받을 수 있다.

 

 3) 모든 클래스는 java.lang.Object를 상속받는다(최상위 클래스).

 

2. 다형성

  ● 같은 기능을 호출하더라도 객체에 따라 다르게 동작하는 것

  ● 상위클래스의 동작을 하위클래스에서 다시 정의하여 사용하는 것도 다형성에 포함된다.

       ->오버라이딩(Overriding)=재정의

 

    예)리모컨에서 ▶버튼을 눌렀을 때 컴퓨터, TV에서 각각 다른 동작이 수행됨

  오버로딩(중복정의) 오버라이딩(재정의)
공통점 메소드명이 중복된다
차이점
  • 매개변수의 개수나 타입이 다름

*리턴타입이나 접근제한자는 상관없음
  • 매개변수의 개수와 타입이 같아야 함
  • 리턴타입이 같아야 함
  • 실행되는 코드가 다르다.
  기존에 없는 새로운 메소드 생성
  • 상속관계만 가능
  • 상위클래스에서 상속받은 메소드의 코드 변경

 

3. 레퍼런스 변수의 Casting(형 변환)-상속관계의 클래스일 경우

  1)Upcasting

 

  ● 하위클래스가 상위클래스의 타입으로 “자동” 타입변환(다형성)

  ● 상위클래스의 변수, 메소드만 접근가능/하위클래스에서 확장한 메소드는 접근불가

  ● 단, 하위클래스가 상위클래스의 메소드를 오버라이딩 한 경우 하위클래스의 메소드 호출

     (하위클래스에서 상위클래스와 동일한 메소드의 내용을 변경한 경우 변경한 내용이 출력)

 

  ● 사용방법

  상위클래스 변수명 = new 하위클래스();

  변수명.메소드;

    예)ParentStore ps = new ChildStore();

          ps2.makeSuta();

          ps2.makeBibim();

          ps2.makeTangsu();(x)

       →상위클래스로 형변환된 경우 하위클래스에서 확장한 메소드를 사용할 수 없다.

 

  2)DownCasting

    ● 상위클래스로 업캐스팅된 하위클래스가 하위클래스의 타입으로 “강제” 타입변환

    ● 상위클래스로 간 하위클래스를 다시 하위클래스로 불러오는 기능

    ● 사용방법

      하위클래스명 변수명 =new 하위클래스();

      변수명 = (하위클래스명 타입)상위클래스로 업캐스팅된 하위클래스 변수명 

      변수명.메소드;

 

    예)ChildStore cs3 =new ChildStore();

       cs3 = (ChildStore) ps2; 부모클래스로 간 하위클래스를 (하위클래스)를 붙여 새로운

         하위클래스 변수명에 담아준다.

 

     cs3.makeSuta(); ->부모클래스의 기능

     cs3.makeBibim(); ->부모클래스의 기능

     cs3.makeTangsu(); ->자식클래스의 기능

 

   (잘못된 예시)

    ChildStore cs2 =(ChildStore) new ParentStore();

    cs2.makeSuta();

    cs2.makeBibim();

    cs2.makeTangsu();

 

4. 오버라이딩

  ● 하위클래스에서 상위클래스와 동일한 메소드를 재정의하는 것

  ● 오버라이딩 자동완성: 우측마우스-Source-Override/Implement method 활용하기

  ● 오버라이딩 확인하기: @Override 입력하고 메소드명에 오류나는지 확인하기!

 

5. 추상화(키워드 abstract)

  ● 객체에서 공통된 속성과 행위를 추출하는 기법

  ● 상세한 정보는 무시하고 필요한 정보들만 간추려서 구성

 

  1)추상 클래스

    ● 한 개 이상의 추상메소드를 가지고 있는 클래스(필수요건x)

    ● 추상메소드가 없어도 class 앞에 abstract가 쓰여있으면 추상클래스가 될 수 있음

        (일반메소드도 구현가능하다)

 

    ● 추상클래스 선언: 클래스명 앞에 abstract 입력하기

    ● 역할: 하위클래스로부터 상속받는 기능만 한다. 하위클래스에 오버라이딩 강제

    ● 추상클래스는 객체를 생성할 수 없다(상속한 하위클래스는 객체 생성가능).

 

  2)추상메소드

    ● 바디가 구현되지 않은 메소드

    ● 하위클래스에서 ‘반드시’ 오버라이딩하여 구현해야 하는 메소드

    ● 추상메소드 선언: 접근제한자 (abstract 입력) 리턴타입 메소드명

 

6. 업캐스팅된 하위클래스 ArrayList로 만들기

 

Doll, Ryan등은 기본타입처럼 타입에 해당한다.

배열리스트의 문법에 맞춰 똑같이 작성한다.

배열값 불러오기

dList의 0번째 인덱스값은 ryan이므로 ry.pick();=dList.get(0).pick();은 같은 의미이다.

 

for문 이용하여 배열값 불러오기

랜덤으로 배열값 불러오기

 

'JAVA' 카테고리의 다른 글

[JAVA]15. 추상화&인터페이스  (0) 2023.06.16
[JAVA]14.디자인 패턴  (0) 2023.06.15
[JAVA]12. 생성자  (0) 2023.06.11
[JAVA]11. 객체지향 프로그래밍  (0) 2023.06.10
[JAVA]10. ArrayList  (0) 2023.06.09