기존의 클래스로 새로운 클래스를 작성하는 것 (== 코드의 재사용)
두 클래스를 부모와 자식으로 관계를 맺어주는 것
class 자식 클래스
extends
부모클래스 { ... }
자손은 조상의 모든 멤버을 상속 받는다. (생성자, 초기화 블럭 제외)
자손의 멤버 개수는 조상보다 적을 수 없다 == 같거나 많다.
자손의 변경은 조상에 영향을 미치지 않는다.
class Tv{
boolean power; // 전원상태(on/off)
int channel; // 채널
void power() { power = !power; }
void channelUp() { ++channel; }
void channelDown() { --channel; }
}
-> 부모 클래스 멤버 5개
class SmartTv extends Tv { // SmartTv는 Tv에 캡션(자막)을 보여주는 기능 추가
boolean caption; // 캡션 상태(on/off)
void displayCaption(String text) {
if (caption) { // 캡션 상태가 on(true)일 때만 text를 보여준다.
System.out.println(text);
}
}
}
-> 자식 클래스 멤버 2개 (상속까지 도합 멤버 7개)
class Ex7_1{
public static void main(String args[]){
SmartTv stv = new SmartTv();
stv.channel = 10; // 조상클래스로부터 상속받은 멤버
stv.channelUp(); // 조상클래스로부터 상속받은 멤버
System.out.println(stv.channel);
stv.displayCaption("Hello, World");
stv.caption = true; // 캡션(자막) 기능을 켠다.
stv.displayCaption("Hello, world");
}
}
포함 관계
포함(composite)?
클래스의 멤버로 참조변수를 선언하는 것
단일 상속
Java는 단일 상속 = 하나의 부모만 상속 받을 수 있다. 만을 허용한다. (C++은 다중상속 허용)
비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다.
Object클래스 - 모든 클래스의 조상
부모가 없는 클래스는 자동적으로 Object 클래스를 상속받게 된다.
모든 클래스는 Object 클래스에 정의된 11개의 메서드를 상속받는다.
→ toStirng(), equals(Objdect obj), hashCode(), ...
오버라이딩
상속받은 조상의 메서드를 자신에 맞게 변경하는 것 (내용==구현부.{ }만 변경 가능, 선언부 변경불가)
class MyPoint3{
int x;
int y;
String getLocation(){
return "x:"+x+", y:"+y;
}
}
class MyPoint3D extends MyPoint3 {
int z;
// 조상의 getLocation()을 오버라이딩
String getLocation()
return "x:"+x+", y:"+y+", z:"+z;
}
}
public class OverrideTest {
public static void main(String[] args){
MyPoint3D p = new MyPoint3D();
p.x = 3;
p.y = 5;
p.z = 7;
System.out.println(p.getLocation());
}
}
오버라이딩의 조건
- 선언부가 조상 클래스의 메서드와 일치해야 한다.
- 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
- 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
오버로딩 vs 오버라이딩
오버로딩== 기존에 없는 새로운 메서드를 정의하는 것(new)
오버라이딩== 상속받은 메서드의 내용을 변경하는 것(change, modify)
'Programming > Java' 카테고리의 다른 글
DAY 16. [JAVA] 변수의 형변환(Casting) 종류와 정의 (0) | 2021.09.01 |
---|---|
DAY 15. [JAVA] 변수와 Static / Heap / Stack 메모리 구조 (0) | 2021.08.31 |
[JAVA] 패키지(package) / 제어자 (0) | 2021.08.08 |
[JAVA] 매개 변수 / static&인스턴스 메서드 (0) | 2021.08.02 |
[JAVA] return문 / 반환값 / 호출스택 (0) | 2021.07.30 |
Uploaded by Notion2Tistory v1.1.0