상속의 개념
→ 상속은 부모 클래스에 만들어진 필드와 메소드를 자식 클래스가 물려받는 것
→ 상속 선언만 하면 자식 클래스는 부모 클래스에 만들어진 필드와 메소드를 만들지 않고도 만든 것과 같은 효과를 얻는다.
상속의 필요성
→ 코드중복을 제거하여 클래스를 간결하게 구현할 수 있음
→ 소프트웨어의 생산성 향상: 클래스 재사용과 확장 용이

5.2 클래스 상속과 개체
▶ 자바의 상속 선언
→ 부모클래스 = 슈퍼클래스
→ 자식클래스 = 서브클래스

▶ 상속과 개체
- 상속선언
class ColorPoint extends Point { ..... } : Point를 상속받는 ColorPoint 클래스 |
서브 클래스 객체 생성 : 서브클래스 객체 모양을 잘 볼것!
Point p = new Point ( ); ColorPoint cp = new ColorPoint( ); // 서브 클래스 객체 생성 |

: 객체 p는 Point 클래스 멤버만 가지고 cp는 point 클래스와 colorpoint 클래스 멤버 모두를 가진다.
상속은 바로 cp 객체 처럼 슈퍼 클래스의 멤버와 서브 클래스의 멤버를 모두 갖고 있는 것
- 서브 클래스 객체 활용
- 서브 클래스에서 슈퍼 클래스 멤버 접근 : 서브 클래스는 슈퍼 클래스의 private 멤버를 제외하고 모든멤버를 접근할 수 있다.

<< check time>>
1. 자바에서 상속을 선언하는 키워드는?
extends
2. 슈퍼클래스를 가지지 않은 유일한 자바 클래스는?
java.lang.object
3. 서브클래스에서 슈퍼 클래스에 pricate으로 선언된 멤버를 접근가능?
nope!!!
5.3 상속과 protected 접근 지정자
○ 자바의 접근 지정자 4 가지
public, protected, 디폴트, private -> 상속 관계에서 주의할 접근 지정자는 private와 protected ○ 슈퍼 클래스의 private 멤버 슈퍼 클래스의 private 멤버는 다른 모든 클래스에 접근 불허
클래스내의 멤버들에게만 접근 허용
○ 슈퍼 클래스의 디폴트 멤버
슈퍼 클래스의 디폴트 멤버는 패키지내 모든 클래스에 접근 허용
○ 슈퍼 클래스의 public 멤버
슈퍼 클래스의 public 멤버는 다른 모든 클래스에 접근 허용
○ 슈퍼 클래스의 protected 멤버
같은 패키지 내의 모든 클래스 접근 허용
다른 패키지에 있어도 서브 클래스는 슈퍼 클래스의 protected 멤버 접근 가능
|

예제 5-2
클래스 person을 아래와 같은 필드를 갖도록 선언하고 , 클래스 Student는 Person을 상속받아 각 멤버별 필드에 값을 저장하라
- private int weight;
- int age;
- protected int height;
- public String name;
package chapter05;
import java.security.PublicKey;
class person{
private int weight; //private 접근지정. Student
public int getWeight() {return this. weight;}
public void setWeight(int weight) { this.weight = weight;}
int age; //default 접근 지정. student 클래스 접근 가능
protected int height; //protected 접근 지정 student 클래스에서 접근 가능
public String name;
}
class Student extends person{ //student가 서브클래스 person이 부모 클래스
public void set() {
super.age =30;
super.name ="홍길동";
super.height=75;
super.setWeight(99);
}
//todo- set 통해 세팅된 값을 출력하는 메소드 추가 1. source -> generate toStirng 클릭
@Override
public String toString() {
return "Student [age=" + age + ", height=" + height + ", name=" + name + ", getWeight()=" + getWeight() + "]";
}
//나만의 타입을 만들어줘도 된다
// public void print(age + "" + height + "" + getWeight());
}
public class InheritanceEx {
public static void main(String[] args) {
//main안에 객체를 만들어야 함 출력도 하려면
Student s = new Student(); //생성자는 공간을 만들어, 공간 생성 후 s가 위치값을 가리키게 함, 생성자 student
s.set();
System.out.println(s.toString());
}
}
//
결과 값

<< chect time >>
1. 서브 클래스와 슈퍼 클래스가 같은 패키지 않에 있을 때, 슈퍼 클래스의 멤버가 어떤 접근 지정자로 선언된 경우 서브클래스에서 접근할 수 없는가?
private
2. 서브 클래스와 슈퍼 클래스가 다른 패키지에 있을 때 슈퍼 클래스의 멤버가 어떤 접근 지정자로 선언된 경우 서브 클래스에서 접근할 수 있는가?
protected / public
5.4 상속과 생성자 ★ 그림 자주 보며 숙지

▶ super()를 이용하여 명시적으로 슈퍼클래스 생성자 선택
: 서브 클래스의 생성자에서 슈퍼 클래스의 생성자를 명시적으로 선택하는 것이 원칙
: super( )는 슈퍼 클래스 생성자를 호출하는 코드

1) main에서 B(int x)생성자 호출
b= new B (5);
2) B(int x)의 생성자는 첫코드로 다음 코드 실행
super(x); //x값은 5 , 상속받는 애가 있으니 부모님 찾아가자 라는 의미
3) super(X)는 슈퍼클래스 A의 다음 생성자 호출 x에 5를 전달
4) A(int x) { ... } // x에 5를 전달받음
★ super( ) 는 반드시 생성자의 첫 라인에 사용되어야 한다는 것
예제 5-3 : super()를 이용하여 ColorPoint 클래스의 생성자에서 슈퍼 클래스 point의 생성자를 호출하는 예

결과 값

'Coding > JAVA' 카테고리의 다른 글
[명품 자바] 추상클래스 구현 연습 예제 5-7 (0) | 2022.04.26 |
---|---|
[명품자바] 05장 상속 실습문제 5번/6번/7번 (0) | 2022.04.19 |
[ while문 사용해서 숫자 맞추기 게임 만들기] (0) | 2022.04.05 |
JAVA_[반복문과 배열 예제 연습] (1) | 2022.03.29 |
[04] 클래스와 객체 (0) | 2022.03.29 |