상속, 오버라이딩, 업캐스트

BruteForceA·2022년 1월 11일
1
post-custom-banner

상속이란?

기존 클래스의 특성(필드)와 기능(메소드)를 물려받아 새로운 클래스를 구성 하는것.






그림출처




기존클래스(부모클래스, 슈퍼클래스) 에서 새로운클래스(자식클래스, 서브클래스) 로 상속을 받는걸 말한다.





상속의 장점

1. 기존 클래스의 변수와 코드를 재사용 하므로 코드의 중복감소, 클래스가 간결해진다.

2. 먼저 작성된 검증된 프로그램을 재사용 하므로써
신뢰성 있는 프로그램을 손쉽게 개발 할 수 있다.

3. 클래스간 계측적 분류 및 관리 -> 유지보수가 용이



상속의 특징

1. 다중상속을 지원하지 않는다.
-> 한 서브클래스는 하나의 슈퍼 클래스만 가질 수 있다.

2. 상속의 횟수에 제한 두지 않음.
-> 자식클래스가 상속받는 부모클래스의 또 다른 부모클래스가 존재 할 수있다.

3. 모든 클래스는 java.lang.Object를 상속 받는다.
-> obeject가 모든 클래스의 최상위 클래스

4. 자식클래스에 작성된 메서드는 부모클래스에서 사용 불가능하다.



오버라이딩 와 오버로딩

오버라이딩(Overriding)이란?

자식클래스에서 부모클래스와 같은 메소드를 재정의 하는것, 부모클래스의 메소드의 동작 방법을 변경하는 것(매개변수의 개수, 순서 타입과 반환타입은 같음)(재정의)



오버로딩(Overloading)이란?

매개변수의 개수나 순서, 타입이 다른 같은 이름의 메소드를 여러개 정의하는 것 (중복 정의)



Casting 이란?

캐스팅이란 타입 변환을 말함.
클래스의 캐스팅은 업캐스팅과 다운 캐스팅이 있다.



Upcasting

하위클래스가 상위클래스 타입으로 자동 타입 변환하는 것
-> oop 특징 중 다형성에 해당한다.

업캐스팅이 된 경우 원래 객체 내 모든 변수, 메소드에 접근 할 수 없고 상위 클래스의 변수, 메소드에만 접근 가능하다.

단, 하위클래스가 상위클래스의 메소드를 오버라이딩 한 경우 하위클래스 메소드 호출이 가능하다.


Student s1 = new Student(); 
//Person객체를 상속받고있는 하위클래스 객체생성 

Person p = (Person)s1 // s1객체를 상위클래스에 업캐스팅을 한다. (Person) 은 생략가능하지만 관행상 명시하는걸 권장.

Downcasting

업캐스팅된 것을 명시적 타입 변환으로 원래 상태로 되돌리는 것

Student p3 = (Student)p; 
//업캐스트 된 p를 다시 Student 타입으로 다운캐스팅
//다운캐스팅 같은 경우는 Student를 꼭 명시 해줘야 한다.

instanceof 연산자

업캐스팅한 경우 레퍼런스 변수가 가리키는 실제 객체가 어떤 클래스의 타입인지 구분하기 위한 연산자

Student s1 = new Student(); 
//Person객체를 상속받고있는 하위클래스 객체생성 

Person p = (Person)s1 // s1객체를 상위클래스에 업캐스팅을 한다. (Person) 은 생략가능하지만 관행상 명시하는걸 권장.

System.out.println(p instanceof Student);
// 업캐스팅한 p는 원래 타입이 Student였으니 true값이 나온다.

System.out.println(p instanceof Teacher);
//타입이 Teacher가 아니라서 false가 나온다
post-custom-banner

0개의 댓글