자바 - Java/이론
[Java] Java Programming - 상속, 다형성, 추상화, Overriding, Implements
totoscoming
2020. 4. 2. 16:53
상속(IS-A 문법)
- 클래스 간 관계와 관련이 있음
- 코드 중복도 문제를 해결할 수 있음
- Super(): 부모 클래스 생성자를 call
- 모든 클래스는 Object 클래스를 상속하는 코드가 생략되어 있음(extends Object), 예외 X
다형성
- 변수 하나가 여러 자료형을 담는 형태
- 클래스 간 결합도(클래스끼리 의존도) 문제를 해결할 수 있음
- 편의성을 높이고, 모듈화에 용이함
- 부모 클래스가 여러 자료형의 하위 클래스를 담을 수 있음
- 상위 클래스의 참조 변수는 자신을 상속받는 하위 클래스 인스턴스의 주소를 저장할 수 있음 -> Up casting
- 이때, 부모 클래스는 자식 클래스 안에 있는 자신의 클래스 내용만 가짐, 즉, 부모 자료형 인스턴스만 인식
- 하위 인스턴스까지 인식하려면 Down casting을 해 줘야 함
- Down casting을 쓰지 않고도 하위 클래스의 인스턴스를 사용할 수 있는 방법
- Override
- implements
Method Overring
- 부모 클래스 메서드를 무효화시킴
- 상속 관계에서 쓰임, 메서드를 자식 클래스가 재정의함
Method implements
- 부모의 추상 클래스 메서드를 정의함
추상화
- 설계 목적의 클래스
- new가 안 됨, 즉, instance를 못 만듦
- abstract public method
- 설계 목적 코드
- 자식 클래스가 overriding 하는 것에 강제성을 줌
▽ 예제 코드 1 ▽
import java.util.Scanner;
// 모든 클래스는 extends Object 생략되어 있음, 예외 X
class A { // 부모 클래스
public void fucA() {
System.out.println("A");
}
}
class B extends A { // 자식 클래스
// overriding
public void fucA() {
System.out.println("overriding B");
}
public void fucB() {
System.out.println("B");
}
}
class C extends B {
}
class D extends C { // 다중 상속, 자동으로 부모의 부모 클래스까지 상속받음
}
public class Poly {
public static void main(String[] args) {
// 다형성: 변수 하나가 여러 자료형을 담는 형태
// 부모 클래스가 여러 자료형의 하위 클래스를 담을 수 있음
// 상위 클래스의 참조 변수는 자신을 상속받는 하위 클래스 인스턴스의 주소를 저장할 수 있음
// A를 상속받은 B 클래스 안에 있는 A 클래스의 내용만 가짐, 즉, A형 인스턴스만 인식
// 기본 자료형에서는 Promotion이라 하지만, 클래스에서는 Up casting이라고 함
A a = new B();
// a.fucB(); X
// down casting - B 인스턴스까지 인식
((B)a).fucA();
((B)a).fucB();
// down casting을 쓰지 않고도 하위 클래스의 인스턴스를 사용할 수 있는 방법
// 1. override
// 2. implements
a.fucA();
// 모든 클래스들은 자동으로 Object를 상속받음(최고도상)
C c= new C(); // 클래스 안에 내용이 없어도 가능
Object o1 = new Object();
Object o2 = new Scanner(System.in);
Object o3 = new A();
Object o4 = 10; // new Integer(10); 자동으로 변환됨 -> Auto Boxing 기본 자료형을 참조형으로 대입할 때 일어남
}
}