상속(Inheritance)이란?
정의
부모의 모든 것을 자식에게 상속하는 것 ( == 사용할 수 있게 하는 것)
형식
클래스 자식 클래스명 extends 부모 클래스명
ex) class Strawberry extends Fruit
참조
상속 관계에선 Overriding을 할 수 있다.
오버라이딩(overriding)이란 ? : 덮어쓴다.
정의
상속받은 조상의 메서드를 자신에 맞게 변경하는 것
참조
선언부 변경불가. 내용만 변경가능
조건
1. 선언부가 조상 클래스의 메서드와 일치해야 한다.
: 선언부(반환타입, 메서드이름, 매개변수 목록)
2. 접근제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
예시
class Fruit { // 부모class 생성
String name;
Fruit(String name){
super(); // 생략된 것 (부모는 Object)
this.name = name;
}
void color() {
System.out.println(" 노란색");
}
void p(String str) {
System.out.print(str);
}
void pln(String str) {
System.out.println(str);
}
}
class Strawberry extends Fruit { // 자식class 생성
int count;
Strawberry(String name, int count){
super("딸기");
this.count = count;
}
void color() { // 부모메소드 오버라이딩
System.out.print(" 빨간색");
}
void action() {
System.out.println("이다.");
}
}
public class User {
public static void main(String[] args) {
Fruit f = new Fruit("바나나");
f.p(f.name+"는");
f.color();
Strawberry s = new Strawberry("딸기", 10);
s.p(s.name+"는");
s.color();
s.action();
s.pln(s.count+"개 정도 먹고싶다.");
Fruit f3 = new Strawberry("바나나", 12); // 다형성
Fruit f1 = s; // 부모 -> 자식 (자동형변환)
f1.p(f1.name+"는 ");
f1.color();
/* f1.action();
f1.pln(f1.count+"개 정도 먹고싶다."); */
f.pln("");
Strawberry s1 = (Strawberry) f1; // 자식 -> 부모 (강제형변환) 다 쓸 수 있다.
s1.p(s1.name+"는");
s1.color();
s1.action();
s1.pln(s1.count+"개 정도 먹고싶다.");
/* Strawberry s2 = (Strawberry) f; // 잘못된 강제형변환 ClassCastException (원래 부모인데 자식에 끼어맞추면 깨져버린다.)
s2.p(s.name+"는"); RunTimeError (컴파일은 되는데 실행이 안된다.)
s2.color();
s2.action();
s2.pln(s.count+"개 정도 먹고싶다."); */
}
}
참조
형변환은 상속관계에서만 가능하다.
자동형변환( 자식 → 부모 ) → 묵시적
: overroding유지, 부모 객체만 호출 가능.
강제형변환( 부모 → 자식 ) → 명시적
: overroding유지, 자식 객체 호출 가능.
잘못된 강제 형 변환은 RuntimeException를 발생시킨다. 컴파일은 가능, 실행 불가.
실행화면
바나나는 노란색
딸기는 빨간색이다.
10개 정도 먹고싶다.
딸기는 빨간색
딸기는 빨간색이다.
10개 정도 먹고싶다.
'IT > Java' 카테고리의 다른 글
[자바] jsoup을 이용하여 웹 크롤링 구현하기 (0) | 2021.07.20 |
---|---|
[자바] ArrayList / LinkedList / ArrayList 에 어떠한 클래스 든 다 저장하고 싶은 경우 (0) | 2021.06.01 |
[자바] 싱글톤(Sington) (0) | 2021.05.31 |
[자바] 파일 쓰기 (0) | 2021.05.26 |
[자바] 파일 읽기 (0) | 2021.05.16 |