일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자바 조합 재귀
- jquery dom 계층 선택자
- inner class
- jquery 이벤트 처리
- Interface
- 조합 재귀
- java lambda
- 재귀함수
- 자바 재귀 조합
- 자바스크립트 이벤트처리
- 순열코드
- str to char array
- 자바 순열 코드
- jquery 필터선택자
- parseInt()
- 서로소
- 자바스크립트 이벤트중지
- 자바
- 알고리즘 그래프
- 자바입출력
- 상속
- jquery 속성선택자
- 재귀
- char to str
- 후위표기
- Java
- 순열 재귀
- 알고리즘
- java Collections.sort()
- java 내부 클래스
- Today
- Total
유블로그
[Java] 다형성, 상속 본문
다형성 : 하나의 이름으로 여러 개의 형태를 구성할 수 있는 OOP 특징
- Type
- Method
- Method
overloading | name이 같아도, parameter가 다르면 별개의 method로 간주함. 생성자도 동일 + 접근제한자가 달라도 오버로딩(상속 때 말고!!!) |
overriding | 상속 관계에서 부모 Class의 method를 자식 Class에서 재정의 할 수 있음 |
오버라이딩 시 부모 클래스 method 접근제한자와 자식 클래스 method 접근제한자가 같아야 한다.
그래서 public String toString(){} 함수 같은 경우에 public 을 변경할 수 없다. Object의 메소드를 오버라이딩하는 것이기 때문.
- Type
부모 Type으로 자식 Type의 객체를 Reference 할 수 있다. = 부모는 자식을 받을 수 있다!!
즉, 한 개의 Type으로 여러 하위 Type의 객체를 할당 받을 수 있다.
Object ← A ← B 상속관계일 때,
Object o = new A(); // 가능
B b = new A(); // 불가능
A a = new B(); // 가능
Object o = new B(); // 가능
** 부모 = 자식 은 가능하지만 (묵시적 형변환), 자식 = 부모는 가능하지 않다. **
자식 = 부모 -> 명시적형변환 시 가능.. ex) b = (B)new A();
** 같은 메서드 기준 : parameter 와 함수 이름 **
public class A {
int a = 1, b = 2;
public String toString() {
return a + " " + b;
}
}
public class B extends A{
int c = 3;
public String toString() {
return a + " " + b + " " + c;
}
public static void main(String[] args) {
A a2 = new B();
System.out.println(a2.toString()); // 1 2 3
// B의 toString 이 실행됨
}
}
class A {
void a(int i) {
System.out.println("A");
}
}
class B extends A {
void b() {
System.out.println("B");
}
}
class C extends B {
void a() {
System.out.println("C");
}
void b(int i) {
System.out.println("C");
}
}
class D extends C {
void a(int i) {
System.out.println("D");
}
void b() {
System.out.println("D");
}
}
class E extends D {
void a() {
System.out.println("E");
}
void b() {
System.out.println("E");
}
}
public class Test {
public static void main(String[] args) {
A x0 = new C(); x0.a(); // 에러 : A의 a는 매개변수가 필요한데 C에는 매개변수 있는 a함수가 없기 때문에 오류.
C x1 = new E(); x1.b(3); // C의 b함수 호출
D x2 = new B(); x2.b(); // 에러 : D는 B의 하위 클래스이다.
B x3 = new D(); x3.a(3); // D의 a함수 호출
}
}
부모 A = 자식 B
이런 상황일 때 A.func() 하면,
먼저 A가 가진 func()를 기본적으로 호출한다.
하지만 부모를 상속받은 자식이 오버라이딩한 함수가 있다면 그 함수 호출.
오버라이딩 함수 제외한 모든 것은 부모의 것을 호출한다.
< @Override Annotation >
method 를 재정의 할 때 사용 권장
부모 Class의 특정 method를 재정의 한다고 compiler에게 명시하는 것.
만약 부모 Class에 해당 method 가 없는 경우 compile 오류 발생.
부모 Class 에서 변경이 생기고 a 함수가 지워졌다면
a 함수를 override 한 자식 클래스에서 오류가 나서 변경된 것을 알 수 있다.
'Java' 카테고리의 다른 글
[Java] Inner class (0) | 2020.08.10 |
---|---|
[Java] Interface - 추상화 (0) | 2020.08.10 |
[Java] 상속과 접근제한자 (0) | 2020.08.10 |
[Java] 입출력 처리 - Scanner, BufferedReader (0) | 2020.08.10 |
[Java] StringBuilder 사용법 (0) | 2020.07.29 |