Daily coding
Java Basic : day 9 - Inheritance 상속 3 - Overriding 오버라이딩 본문
Java Basic : day 9 - Inheritance 상속 3 - Overriding 오버라이딩
sunnnkim 2019. 11. 29. 17:42오버라이딩 Overriding
// 부모클래스
public class ParentClass {
// 부모클래스의 메소드
public void ParentMethod() {
System.out.println("ParentClass ParentMethod() 호출");
}
}
// 자식1 Jane
public class JaneClass extends ParentClass {
// ParentClass의 ParentMethod 상속 + 오버라이딩
public void ParentMethod() {
System.out.println("JaneClass ParentMethod");
}
}
// 자식2 Tom
public class TomClass extends ParentClass {
// ParentClass의 ParentMethod 상속 + 오버라이딩
public void ParentMethod() {
System.out.println("TomClass ParentMethod");
}
public void func() {
System.out.println("TomClass 에만 있는 메소드");
}
}
* 자식 객체의 메소드 오버라이딩
// 자식 객체는 부모 객체의 메소드를 상속받아 쓸 수 있으나
// 자식 객체에서 메소드를 재정의 (오버라이딩) 해서 사용할 수 있다.
// 자식 객체에서 메소드를 오버라이딩 한 후, 자식 객체의 인스턴스를 생성하면
// 오버라이딩한 메소드의 결과가 출력된다.
TomClass tc = new TomClass();
JaneClass jc = new JaneClass();
tc.ParentMethod();
jc.ParentMethod();
// 결과 출력 :
// TomClass ParentMethod
// JaneClass ParentMethod
오버라이딩의 목적 :
하나의 인스턴스 형으로 관리를 용이하게 하기위해 사용한다.
아래는 parentClass 와 자식이 공통으로 가지고 있는 필드와 메소드를 관리하기 용이하다.
ParentClass p1 = new TomClass();
ParentClass p2 = new JaneClass();
// p1.func();
// 위의 코드 중 p1은 자식 클래스 (TomClass) 의 인스턴스
(자식클래스를 동적할당 받아 자식클래스의 정보를 가지고 있음)
// p1은 TomClass에 있는 필드와 메소드 중 ParentClass로 부터 상속받은 영역에만 접근이 가능하다
// ( 데이터 타입이 ParentClass이기 때문에 포인터가 ParentClass로 되어있다 )
// TomClass에서 독자적으로 선언한 메소드에는 자동으로 접근이 불가능하다
// 부모 클래스로 데이터타입을 선언했으나
// 자식 클래스로 동적할당한 경우에서
// 자식 클래스의 고유한 메소드를 사용하고 싶으면
// 명시적으로 Type Casting(형변환)을 해주어야 한다.
// 아래는 예시
TomClass t1 = (TomClass) p1;
t1.func(); // func는 TomClass에만 있는 메소드임
// 위의 코드는 아래의 코드와 비슷하다
Object a[] = new Object[3];
a[0] = "배고파";
a[1] = 1;
a[2] = '3';
// int sum = a[1] + 3; // 오류
int sum = (int)a[1] + 3;
// String str = a[0]; // 오류
String str = (String)a[0];
// char c = a[2]; // 오류
char c = (char)a[2];
// 아래의 코드도 비슷한 예시이다
Object o = new String(" 배고파.. ");
// String a = o; --> 오류
// o.trim; --> 오류 (trim은 스트링 메소드이기 때문)
String str1 = ((String)o).trim();
TomClass tomArr[] = new TomClass[5];
JaneClass janeArr[] = new JaneClass[5];
// 위에는 각각 클래스를 배열로 받는 방법이다
// 위의 방법은 각각 배열 할당 개수를 정확하게 정해야 한다.
ParentClass parArr[] = new ParentClass[10];
parArr[0] = new TomClass();
// 부모클래스를 배열로 잡으면
// 자식객체이면 모두 할당할 수 있다.
}
}
'Language > Java_basic' 카테고리의 다른 글
Java Basic : day 9 - Final (0) | 2019.11.29 |
---|---|
Java Basic : day 9 - Inheritance 상속 4 : 예시 (0) | 2019.11.29 |
Java Basic : day 9 - Inheritance 상속 2 - super 참조 (0) | 2019.11.29 |
Java Basic : day 9 - Inheritance 상속 1 - extends 예약어, 접근제어자, super (0) | 2019.11.29 |
Java Basic : day 9 - Static 스태틱 (0) | 2019.11.29 |