본문 바로가기
자바 JAVA

23.01.13 (클래스와 객체)

by 2023코딩시작 2023. 1. 13.

inheritance ~ overriding ~abstracts

 

😀상속

  • 부모 클래스 - 자식클래스
  • 형식)  자식클래스에서...
  • [접근제한] class 자식클래스명 extends 부모클래스명 {}
  • 자식클래스에서 멤버변수나 멤버메서드는 숨겨져서 보이지 않음
 * 상속(Inheritance)?
 * - 객체지향 프로그램 4대 특징 중 하나.
 * - 실세계에서의 상속은 상위 객체의 속성이 하위 객체에 물려져서 하위 객체가 상위 객체의 속성을 모두 가지는 개념임.
 * - 자바에서의 상속은 자식클래스가 부모클래스의 속성을 물려 받고 기능을 추가하여 확장(extends) 하는 개념임.
 * - 상속은 슈퍼클래스의 필드와 메서드를 물려 받아서 코드를 재사용 함으로써, 코드 작성에 드는 시간과 비용을 줄일 수 있음.
 * - 기존에 이미 잘 만들어진 클래스를 재사용하여 새로운 클래스를 생성하는 자바 문법. - 중요함.
 *   즉, 특정 클래스를 만들 때 기존의 클래스의 데이터(속성)와 기능(메서드)을 그대로 물려 받아서 중복적인 코드를 없애줌.
 *   (클래스의 재사용, 코드의 중복을 없애줌)
 * - 자식과 부모의 관계로 형성이 되어 있음.
 *   ==> 부모클래스 : Super, Parent 클래스라고 하기도 함.
 *   ==> 자식클래스 : Sub, Child 클래스라고 하기도 함.
 *   ==> 자식은 부모의 멤버보다 같거나 많다.
 * - 상속의 대상은 멤버(멤버변수, 멤버메서드)
 *   ==> 단, 생성자나 private 접근 제한을 갖는 멤버변수와 멤버메서드는 상속에서 제외.
 * - 상속 시 사용되는 키워드 : extends
 * - 상속은 단일상속만 가능함.
 *   ==> 즉, 상속을 받을 수 있는 클래스는 하나이다.
 * - 상속의 장점은 클래스의 수정을 최소화시킬 수 있다는 장점이 있음.
 *   또한 유지보수의 시간을 최소화시켜 준다는 장점이 있음.
 *   
 *   형식)
 *    [접근제한] class 자식클래스명 extends 부모클래스명 {
 *    .......;
 *    }
 * - 상속관계 : "~ 은 ~ 이다." ==> is ~ a 관계
 *   포함관계 : "~ 은 ~ 를 가지고 있다." ==> has ~ a 관계
 *            ==> 사람은 (name, age, id)를 가지고 있다.
 *            
 * - 주의사항) 부모클래스는 반드시 기존에 미리 정의되어 있어야 함.
 */


 😀 Sonata 클래스의 객체 생성과정
 * Sonata 클래스의 객체 생성시에 JVM은 우선적으로 
 * Car 부모클래스의 객체를 생성한 후에 그 다음에 Sonata 클래스의 객체를 생성함
 */

 

😀 void getStudentInfo() {}

// 멤버 메서드에서 접근지정자가 없는 경우는 default값으로 package 내 어디클래스든 호출 가능하다.

 

 1. super 키워드
 *    - 부모의 멤버를 호출하는 명령어
 *      형식) super.부모클래스멤버(멤버변수, 멤버메서드)
 *    
ex) 메서드 실행명령문에서 super.멤버
 2. this 키워드
 *    - 현재 클래스에 소속된 멤버를 호출하는 명령어
 *    - this 키워드는 현재 객체 자기 자신을 의미함.
 *      형식) this. 현재(자식)클래스멤버(멤버변수, 멤버메서드)
 */

 

😀 인자 생성자 실행명령문에서 super()

== > 부모 클래스의 기본생성자 호출

 

😀 인자 생성자 실행명령문에서 super(x, y)

== > 부모 클래스의 인자생성자 호출

 

😀 인자 생성자 실행명령문에서 this(x, y)

== > 본인 클래스의 인자생성자 호출

 

 

 

😀 메서드 재정의(Method Overriding)
 * - 부모 클래스에서 정의한 메서드를 자식 클래스에서 
 *   자식 클래스에 맞게 다시 작성(재정의) 하는 것을 말함.
 *
 * [메서드 재정의 특징]
 * 1. 반드시 상속 관계에서만 발생함.
 *    (메서드 다중 정의 : 동일한 클래스 내에서 발생)
 * 2. 부모 클래스의 원형 메서드를 자식 클래스에서 재정의(다시 작성).
 * 
 * ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
 * [메서드 재정의 조건]
 * 1. 반드시 접근 지정자, 리턴타입(반환형), 매개변수 모두 일치해야 함.
 *    (메서드 다중 정의 - 매개변수의 갯수가 다르거나, 갯수가 같다면 자료형이 다르던지 해야 함)
 * 2. 접근지정자는 확장 가능(축소 불가능). // 근데 동일하게 맞춰주는게 더 좋음
 */ 

 

😀overriding에서 부모 클래스를 상속받고 ctrl+space눌러서 메서드 찾고 누르면

@표시로 나오는게 있는데 이게 있으면 오타 났을 때 빨간 줄 뜸

 

 

😀추상 클래스(Abstract Class)?
 * 1. 추상 메서드를 포함하는 클래스.
 * 2. 추상 메서드는 본체(body)가 없는 메서드.
 *    ==> 선언은 되어 있으나 코드가 구현되지 않은 껍데기만 있는 메서드를 말함.
 *        예) void display();    // {    } 가 없다.
 * 3. 클래스 앞에 abstract 키워드를 붙여야 한다.
 * 4. 추상 메서드를 재정의하지 않으면 error 발생.
 *    ==> 추상 메서드 재정의 강제성.
 * 5. 추상 클래스는 객체 생성이 불가능.
 *    ==> - 자식 클래스를 대상으로 객체 생성.
 *        - 원칙적으로 자식 클래스도 추상 클래스임.
 *          이유는 추상클래스를 그대로 상속을 받았기 때문임.
 *        - 하지만 부모의 추상 메서드를 재정의하게 되면 객체생성이 가능함.
 * 6. 추상 클래스는 추상 메서드를 가진 클래스를 말함.
 * 7. 물론 일반 멤버(멤버변수, 멤버메서드)를 가질 수 있음.
 * 8. 그러나 한 개 이상의 추상 메서드는 반드시 존재해야 함.
 *    형식)
 *     [접근제한] abstract class 클래스명 {   }
 * 9. 용도 : - 응용 프로그램에서 설계와 구현 부분을 분리해서 작업 시 사용됨.
 *          - 추상 클래스를 책의 목차에 비유를 하면, 서브클래스는 목차에 따라 완성된 책과 같음. 
 *            책을 쓸 때도 목차를 잡아 놓고 책을 쓰면 훨씬 쉽고 빠르며 방향이 흐트러지지 않는 것처럼 
 *            추상 클래스를 이용하면 응용 프로그램의 설계와 구현을 분리할 수 있음.
 */
/*
 * 추상 클래스에서 error 발생 - 2가지
 * 1. 자식 클래스에서 추상 메서드를 재정의(O).
 * 2. 자식 클래스에서 재정의를 하지 않는 경우
 *    ==> 자식 클래스 이름 앞에 abstract 키워드를 붙여야 함.
 */

😀추상클래스(세부 내용이 달라서 어차피 메서드 재정의 해야할 경우 사용)

  1. 클래스 앞에 abstract 키워드를 붙여야 한다 + 추상메서드 앞에 asbstract 키워드 붙이기
  2. 자식클래스에서 추상 메서드를 재정의
  3. main메서드에서 자식 클래스를 이용하여 객체 생성

'자바 JAVA' 카테고리의 다른 글

23.01.17 (추상 클래스)  (0) 2023.01.17
23.01.16 (상속과 다형성)  (0) 2023.01.16
23.01.12 (클래스와 객체)  (0) 2023.01.12
23.01.11 (클래스와 객체)  (0) 2023.01.11
23.01.10 (클래스와 객체)  (0) 2023.01.10

댓글