*오늘의 학습 목표*
상속과 다형성에 대해
각각 90%이상 이해하고 활용해보기
(1)상속이란?
새로운 클래스를 작성할 때 기존에 존재하는 클래스를
물려받아 이용하는 것.
멤버를 물려주는 클래스 = 부모 클래스 or 조상 클래스
상속받는 클래스 = 자식 클래스 or 자손 클래스
상속할 때는 새롭게 작성할 클래스 선언 뒤에
extends 부모 클래스 이름
을 붙임.
class Parents{}
class Child extends Parents{}
//Parents 클래스의 멤버들을 상속받음
상속을 사용하는 이유는
코드의 재사용성과 중복성을 줄이기 위함
※상속 시 생성자는 상속되지 않음.

Test05_01.java

Test05_01.java(2)

Test05_01.java(3)
tip)class의 이름은 기본적으로 첫글자 대문자
자바에서는 단일 상속만 허용(2개 이상 상속×)
클래스 앞에 final이 붙은 경우 상속×
(2)오버라이딩
: 자손 클래스에서 상속받은 부모 클래스의 메서드를 수정하는 것
tip)이클립스 사용 시 오버라이딩 할 때
메뉴에서 [source]-[Override/Implement Methods]을 클릭한 후
오버라이딩할 메서드를 선택하면 자동으로 재정의할 메서드 추가.

Test05_02.java

Test05_02.java(2)
※작업창이 다른 클래스여도(예를 들어 Test05_01.java, Test05_02.java)
같은 패키지 안에서 메서드 이름이 겹치면 서로 상호작용됨.
(가장 첫번째 생성된 클래스를 가장 상위 클래스로 인식해 찾아감)
참조변수 this, super (p.114)
this : 인스턴스들이 메서드를 호출할 때, 메서드는 공용으로 사용하게 되는데
(위에 ※에서 한 말과 동일), 이때 각 인스턴스의 정보를 저장하는 변수
this() : 클래스에서 생성자의 임무가 겹칠 때, 한 생성자로 임무를 집중시킬 수 있음.
((사실 이건 아직 무슨 소린지 이해 안됨))
super : 상속에서 자식 멤버와 이름이 겹칠 때 super.변수, super.메서드()를
사용하면 자식의 멤버가 아닌 부모의 멤버 호출 가능
super() : 자식 생성자에서 부모 생성자를 호출할 때 사용
(3)상속과 생성자
자식 클래스 생성자 작업 시
반드시 부모 클래스 생성자도 호출해줘야 함
부모 클래스 호출은 무조건
자식 클래스 생성자 첫 줄에서 이루어짐
super();

Test05_03.java

Test05_03.java(2)
++++++++++
Object 클래스
: 모든 클래스의 조상인 클래스
어떤 클래스라도 상속 관계를 따라 거슬러 올라가면
항상 마지막에는 Object 클래스가 있음
모든 클래스는 Object 클래스를 자동으로 상속하기 때문에
Object 클래스 내부에 정의된 멤버들을 사용
ex)toString(), equals() 등
(4)Package와 import
Package란?
클래스를 모아놓은 일종의 집합.
(유지보수 및 관리 용이)
보통 이클립스를 사용하면
패키지와 클래스 관계가 잘 보임
다른 패키지에 있는 클래스를 사용하고 싶을 때
예를 들어
packageA에 있는 PacA 클래스를 사용하고 싶은 경우
packageA.PacA practice = new packageA.PacA();
와 같이 참조함.
하지만 코드가 복잡하기 때문에
경로를 생략하고 써주는 것이 바로
import 패키지명.클래스명;
위에 예를 이어서
import packageA.PacA;
혹은
패키지 안에 모든 클래스를 이용하고 싶으면
import packageA.*;
(5)제어자
: 클래스나 멤버의 사용을 제어하기 위해 사용
Ⅰ. 접근 제어자
: 외부에서 접근할 수 있는 정도와 범위를 지정.
public : 접근 제한이 없음
protected : 같은 패키지 내에서와 자손 클래스에서 접근 가능
default : 같은 패키지 내에서만 접근 가능 (아무런 접근 제어자 작성하지 않았을 경우)
private : 같은 클래스 내에서만 접근 가능
Ⅱ. static
: 변수나 메서드 앞에 붙어 클래스 멤버라는 것을 의미.
앞 챕터에서 본 것처럼
클래스 멤버는 처음 클래스가 메모리에 로드될 때
생성되기 때문에
인스턴스를 생성하지 않아도 사용 가능
Ⅲ. final
: 내용이나 값 변경이 불가.
final 변수 : 값을 더 이상 변경할 수 없는 상수
final 메서드 : 내용을 더 이상 변경할 수 없는 메서드. 오버라이딩 불가
final 클래스 : 내용을 더 이상 변경할 수 없는 클래스. 상속 불가
(6)다형성
: 객체지향언어에서 객체의 자료형을 변경하는 것
객체지향 개념에서 다형성은
'한 가지 타입이 여러 가지 형태의 인스턴스를 가질 수 있다.'
라는 의미
지금까지는
인스턴스를 생성하고 참조변수에 할당할 때
인스턴스와 참조변수의 클래스 타입을 동일하게 작성했지만
A obj = new A();
다형성 정의에 따라
조상 클래스 타입의 참조변수로
자손 클래스 타입의 객체를 참조할 수도 있음
A obj = new B();
//클래스 B가 A를 상속할 때
※조상 클래스 타입의 참조변수로 자손 인스턴스를 참조하는 것만 가능
(그 반대는 에러)
class A{
void methodA(){ }
}
class B extends A{
void methodB(){ }
}
...
A obj = new B();
//obj는 A타입의 참조변수
obj.methodA();
//가능
obj.methodB();
// 에러발생
*이 챕터는 아직 미완성*
'백엔드개발 > Java' 카테고리의 다른 글
[Java] 일급 컬렉션 (0) | 2024.10.30 |
---|---|
[JAVA] StringBuilder (2) | 2024.10.12 |
[JAVA] BufferedReader와 Bufferedwriter (0) | 2024.10.12 |
[JAVA] 멘토씨리즈 자바 Chapter6 (2) | 2024.10.12 |
[Java] 멘토씨리즈 자바 Chapter02-Chapter05 (1) | 2024.10.12 |