2023. 6. 15. 08:31ㆍ개발/☕ JAVA
상속
: 기존의 클래스(부모 클래스)를 재사용하여 새로운 클래스(자식 클래스)를 작성하는 것
공통적인 속성(변수)과 기능(메서드)의 수정이 쉬워진다 -> 유지보수, 코드의 확장성 용이
코드의 중복을 방지한다 -> 코드 간결, 개발 시간 단축
1 ) 용어 정리
- 조상 클래스 = 상위 클래스 = 부모 클래스 = 슈퍼 클래스
- 자손 클래스 = 하위 클래스 = 자식 클래스 = 서브 클래스
부모 클래스를 상속받은 자식 클래스 내부에는 부모 클래스의 모든 변수와 메소드가 존재한다
즉, 부모 클래스 ⊂ 자식 클래스
이때, 생성자와 초기화 블럭은 상속되지 않는다. 오직 멤버(변수, 메소드)만 상속된다.
부모 클래스의 변동은 자식 클래스에 영향을 주지만 자식 클래스의 변동은 부모 클래스에 영향을 주지 않는다
2 ) 상속 선언
( 1 ) 클래스 상속
자식 클래스 extends 부모 클래스
* 다중 상속 불가
( 2 ) 인터페이스 상속
클래스 implements 인터페이스
인터페이스 extends 인터페이스
* 다중 상속 가능
3 ) 상속과 접근 지정자
자식 클래스에서 접근 가능한 부모 클래스의 멤버 : public, protected, default
이제 상속을 구현하는 JAVA의 몇몇 개념들을 정리해보겠다
1 ) super
super 는 자식클래스에서 부모 클래스의 생성자를 하나 선택하여 호출하는 것을 의미한다
- 생성자의 첫번째 코드로 작성해야 함
- 오버로딩 : 생성자 여러 개 작성 가능(매개 변수 개수, 타입, 타입의 순서 달라야 함)
- 객체가 생성될 때 무조건 한번 호출(생성자 작성된 게 없다면 컴파일러에서 기본 생성자 자동 호출)
2 ) 업캐스팅 / 다운캐스팅
자식 클래스는 부모 클래스의 모든 멤버를 포함하고 부모 클래스의 객체로 취급할 수 있다
부모 클래스는 자식 클래스의 일부 멤버만 포함하고 자식 클래스의 객체로 취급할 수 없다
업캐스팅 : 자식 클래스 -> 부모 클래스 (자동 형변환)
다운캐스팅 : 부모 클래스 -> 자식 클래스 (강제 형변환)
3 ) instanceof
객체의 타입 판단하는 데 사용
객체명 instanceof 클래스 타입 -> true / false
interface Person{} //인터페이스
//인터페이스 상속
class Student implements Person {
void study() {
System.out.println("공부공부");
}
}
//인터페이스 상속
class Researcher implements Person {
//생성자1
public Researcher(){
System.out.println("super 사용");
}
//생성자2
public Researcher(String name){
System.out.println(name + "super(String 매개변수) 사용");
}
void research() {
System.out.println("연구연구");
}
}
//클래스 상속 - Researcher의 자식 클래스 -> Researcher의 멤버 모두 사용 가능
class Professor extends Researcher {
//생성자1 -> 생성자3 호출
public Professor() {
super();
System.out.println("생성자3");
}
//생성자2 -> 생성자4 호출
public Professor(String s) {
super(s);
System.out.println("생성자4");
}
void teach() {
System.out.println("수업수업");
}
}
public class java{
public static void main(String[] args) {
Student s = new Student();
Researcher r = new Researcher();
//생성자1
Professor p = new Professor();
Professor pp = new Professor("소으니");
System.out.println(s instanceof Person); //true
System.out.println(r instanceof Person); //true
System.out.println(p instanceof Person); //true
System.out.println(r instanceof Professor); //false
System.out.println(p instanceof Researcher); //true
//업캐스팅
Researcher pr = new Professor();
System.out.println(pr instanceof Researcher); //true
System.out.println(pr instanceof Professor); //true
//다운캐스팅
Professor rp;
rp = (Professor)pr;
System.out.println(rp instanceof Researcher); //true
System.out.println(rp instanceof Professor); //true
}
}
'개발 > ☕ JAVA' 카테고리의 다른 글
☕ Java 예외 처리 (0) | 2024.07.26 |
---|---|
☕ Java 다형성 ( 오버라이딩, 오버로딩 ) (1) | 2024.07.24 |
☕ Java I/O Stream (0) | 2024.07.17 |
☕ Java 캡슐화 ( 클래스/객체, 변수/메서드, 제어자, 생성자, this, getter/setter ) (0) | 2023.06.14 |
☕ Java의 객체 지향적 특징 (추상화, 캡슐화, 상속, 다형성) (0) | 2023.06.12 |