IT수업/JAVA PART1

IT 수업 11주차 (26) 상속

워제하 2024. 3. 8. 12:17

● 상속

- 물려주는 것
- 상위(부모, Super) 클래스의 속성과 기능을 하위(자식, sub)클래스에서 그대로 물려받아 사용할 수 있도록 허용한 문법

- 받은 하위클래스는 상위클래스의 속성과 기능 이외의 멤버를 추가할 수 있다.
- 받은 하위클래스는 상위클래스의 기능을 다시 고쳐 사용할 수 있다(오버라이딩)
- extends예약어 사용

 

 


● 상속 사용 이유?
1. 확장성
2. 유지보수
3. 가독성
4. 코드 중복 최소화

 

 

 

● extends, implements와 abstract 구별

- extends

   : 부모에서 선언과 정의를 모두 하며 자식은 메소드와 변수를 그대로 사용할 수 있다.

- implements (interface 구현) 

   : 부모 객체는 선언만 하며 정의(내용)은 자식에서 오버라이딩 (재정의) 해서 사용해야 한다.

- abstract

   : extends와 interface의 혼합이다. extends는 하되 몇개는 추상 메소드로 구현이 되어있다.

 

 

 

 

상속 기본 코드이다.

 

 

 

Point2D에 toString을 넣어주고

 

 

 

 

Point3D에도 toString을 넣어준다.

 

상속 받을 것이기 때문에 Inherited fileds를 체크해준다.

 

 

 

 

 

 

그리고 값을 넣어 출력해본다.

< 실행화면 >

 

 

 

 

 

● 생성자를 호출

< 실행화면 >

 

 

 

Point3D 클래스에 super(); 넣어본다.

- super()는 상위클래스 Point2D 생성자를 호출하지만 안해도 자동으로 default로 실행된다.

 

 

 

 

 

● super(), this

- super() : 자신이 상속받은 부모를 가리키는 참조변수 ( 부모 클래스를 가리킴 )

- this.객체 = 객체 : 자기 자신의 생성자를 호출. (this.은 자신을 가리키는 참조변수임)

 

Point2D에 인자를 받은 뒤 Point3D에서 super()로 상위클래스인 Point2D의 생성자를 호출하여 인자를 가져온다.

만약 z처럼 상위 클래스에 인자가 없을 때는 있는 인자만 super()로 받아 온 뒤 this.z=z; 로  자기자신의 생성자를 호출하면 된다.

 

 

 

 

 

이렇게 출력을 해본다.

 

 

- Point3D ob = new Point3D(); 했을 시

 

 

 

- Point3D ob2 = new Point3D(10); 했을 시

 

 

 

- Point3D ob3 = new Point3D(10,20); 했을 시

 

- Point3D ob4 = new Point3D(10,20,30); 했을 시

 

 

 

 

 

 

 

 

< 연습 문제 >

다음 main() 메소드와 실행 결과를 참고하여  TV를 상속받은 ColorTV 클래스를 작성하라.

출력 결과 : 32인치 1024컬러

 

 

< 실행결과 >

 

 

protected는 상속관계에 있는 하위 클래스에서만 적용된다.