목차
상속
- 상속이란?
- 상속의 사용
- 메소드 재정의
- 접근 지정자
- 상속과 생성자
- Object 클래스
- 종단 클래스
상속은 코드를 재사용하기 위한 중요한 기법
상속의 개념
- 상속의 개념은 현실 세계에도 존재한다.
상속의 장점
- 상속을 통하여 기존 클래스의 필드와 메소드를 재사용한다.
- 기존 클래스의 일부 변경도 가능(오버라이딩)
- 상속을 이용하게 되면 복잡한 GUI 프로그램을 순식간에 작성할 수 있다.
- 상속은 이미 작성된 검증된 소프트웨어를 재사용
- 신뢰성 있는 소프트웨어를 손쉽게 개발, 유지 보수 가능
- 코드의 중복을 줄일 수 있다.
상속
- 부모 클래스를 수퍼 클래스라고 부르고, 자식 클래스를 서브 클래스라고 부른다.
상속의 예
- is - a 의 관계
상속의 사용
public class Car {
int speed;
int gear;
public String color;
public void speedUp(int s) {
speed += s;
}
public void speedDown(int s) {
speed -= s;
}
...
}
class sportCar extends Car { // 스포츠카는 Car 클래스를 상속한다.
boolean turbo; // 추가한 필드
public void setTurbo(boolean state) { // 추가한 메소드
turbo = state;
}
}
public class TEST {
public static void main(String[] args) {
SportCar c = new SportCar();
c.color = "Red"; // 상속받은 필드 사용
c.speedUp(100); // 상속받은 메소드 사용
c.speedDown(30); // 상속받은 메소드 사용
c.setTurbo(true); // 자체 메소드 사용
상속의 계층 구조
상속의 코드 중복 줄이기
상속에서의 접근 지정자(접근 제한자)

- private는 해당 클래스만 사용가능하기 때문에 상속을 받은 서브클래스도 수퍼클래스의 private를 사용을 하지 못한다.
메소드 재정의(오버라이딩)
- 메소드 재정의(method overriding) : 서브 클래스가 필요에 따라 상속된 메소드를 다시 정의하는 것
class Animal {
public void speak() {
System.out.println("??");
}
}
class Dog extents Animal {
@Override
public void speak() { // 메소드 재정의
System.out.println("멍멍");
}
}
- Dog class의 speak를 호출하면 수퍼클래스의 speak 메소드가 아니라 Dog의 speak 메소드가 호출된다.
- 메소드의 재정의를 의도한다는 것을 컴파일러에게 명시적으로 전달하기 위해 재정의하는 메소드 위에 “@Override” 라는 문장을 달아준다.
상속시 부모 클래스의 생성자
- 자식 클래스의 생성자에서 명시적으로 부모 클래스의 생성자가 호출되지 않으면 자동으로 부모 클래스의 default 생성자가 호출된다.
- 만약 부모클래스의 디폴트 생성자가 없는 경우 명시적으로 부모클래스의 다른 생성자를 호출해줘야한다.
부모클래스 명시적 호출
class Animal {
public Animal(String msg) {
System.out.println(msg);
}
}
class Dog extents Animal {
public Dog() {
super("Dog에서 호출");
System.out.println("Dog 호출");
}
}
👉 Dog에서 호출
Dog 호출
묵시적인 호출
class Animal {
public Animal() {
System.out.println("Animal 호출");
}
}
class Dog extents Animal {
public Dog() {
// Animal 디폴트 생성자 묵시적 호출
System.out.println("Dog 호출");
}
}
👉 Animal 호출
Dog 호출
- Animal의 디폴트 생성자가 존재하여 컴파일러가 자동으로 Animal()을 호출하여줌
Object 클래스
- Object 클래스는 java.lang 패키지에 들어 있으며 자바 클래스 계층 구조에서 맨 위에 위치하는 클래스
Object의 메소드
- protected Object clone()
- 객체 자신의 복사본을 생성하여 반환한다.
- public boolean equals(Object obj)
- obj가 이 객체와 같은지를 나타낸다.
- protected void finalize()
- 가비지 콜렉터에 의하여 호출된다.
- public final Class getClass()
- 객체를 생성한 클래스 정보를 반환한다.
- public int hashCode()
- 객체에 대한 해쉬 코드를 반환한다.
- public String toString()
- 객체의 문자열 표현을 반환한다.
finalize()메소드
- Object 클래스는 finalize()라는 콜백(callback) 메소드를 정의한다.
- 이것은 객체가 소멸되기 직전에 호출된다.
- Object 클래스의 finalize()에서는 아무 것도 하지 않지만 서브 클래스에서 재정의하여서 자원을 반납하는 등의 정리 과정을 실행할 수 있다
종단 클래스와 종단 메소드
- final 을 붙이면 상속이나 재정의가 불가능하다.
상속
- 상속이란?
- 상속의 사용
- 메소드 재정의
- 접근 지정자
- 상속과 생성자
- Object 클래스
- 종단 클래스
상속은 코드를 재사용하기 위한 중요한 기법
상속의 개념
- 상속의 개념은 현실 세계에도 존재한다.
상속의 장점
- 상속을 통하여 기존 클래스의 필드와 메소드를 재사용한다.
- 기존 클래스의 일부 변경도 가능(오버라이딩)
- 상속을 이용하게 되면 복잡한 GUI 프로그램을 순식간에 작성할 수 있다.
- 상속은 이미 작성된 검증된 소프트웨어를 재사용
- 신뢰성 있는 소프트웨어를 손쉽게 개발, 유지 보수 가능
- 코드의 중복을 줄일 수 있다.
상속
- 부모 클래스를 수퍼 클래스라고 부르고, 자식 클래스를 서브 클래스라고 부른다.
상속의 예
- is - a 의 관계
상속의 사용
public class Car {
int speed;
int gear;
public String color;
public void speedUp(int s) {
speed += s;
}
public void speedDown(int s) {
speed -= s;
}
...
}
class sportCar extends Car { // 스포츠카는 Car 클래스를 상속한다.
boolean turbo; // 추가한 필드
public void setTurbo(boolean state) { // 추가한 메소드
turbo = state;
}
}
public class TEST {
public static void main(String[] args) {
SportCar c = new SportCar();
c.color = "Red"; // 상속받은 필드 사용
c.speedUp(100); // 상속받은 메소드 사용
c.speedDown(30); // 상속받은 메소드 사용
c.setTurbo(true); // 자체 메소드 사용
상속의 계층 구조
상속의 코드 중복 줄이기
상속에서의 접근 지정자(접근 제한자)

- private는 해당 클래스만 사용가능하기 때문에 상속을 받은 서브클래스도 수퍼클래스의 private를 사용을 하지 못한다.
메소드 재정의(오버라이딩)
- 메소드 재정의(method overriding) : 서브 클래스가 필요에 따라 상속된 메소드를 다시 정의하는 것
class Animal {
public void speak() {
System.out.println("??");
}
}
class Dog extents Animal {
@Override
public void speak() { // 메소드 재정의
System.out.println("멍멍");
}
}
- Dog class의 speak를 호출하면 수퍼클래스의 speak 메소드가 아니라 Dog의 speak 메소드가 호출된다.
- 메소드의 재정의를 의도한다는 것을 컴파일러에게 명시적으로 전달하기 위해 재정의하는 메소드 위에 “@Override” 라는 문장을 달아준다.
상속시 부모 클래스의 생성자
- 자식 클래스의 생성자에서 명시적으로 부모 클래스의 생성자가 호출되지 않으면 자동으로 부모 클래스의 default 생성자가 호출된다.
- 만약 부모클래스의 디폴트 생성자가 없는 경우 명시적으로 부모클래스의 다른 생성자를 호출해줘야한다.
부모클래스 명시적 호출
class Animal {
public Animal(String msg) {
System.out.println(msg);
}
}
class Dog extents Animal {
public Dog() {
super("Dog에서 호출");
System.out.println("Dog 호출");
}
}
👉 Dog에서 호출
Dog 호출
묵시적인 호출
class Animal {
public Animal() {
System.out.println("Animal 호출");
}
}
class Dog extents Animal {
public Dog() {
// Animal 디폴트 생성자 묵시적 호출
System.out.println("Dog 호출");
}
}
👉 Animal 호출
Dog 호출
- Animal의 디폴트 생성자가 존재하여 컴파일러가 자동으로 Animal()을 호출하여줌
Object 클래스
- Object 클래스는 java.lang 패키지에 들어 있으며 자바 클래스 계층 구조에서 맨 위에 위치하는 클래스
Object의 메소드
- protected Object clone()
- 객체 자신의 복사본을 생성하여 반환한다.
- public boolean equals(Object obj)
- obj가 이 객체와 같은지를 나타낸다.
- protected void finalize()
- 가비지 콜렉터에 의하여 호출된다.
- public final Class getClass()
- 객체를 생성한 클래스 정보를 반환한다.
- public int hashCode()
- 객체에 대한 해쉬 코드를 반환한다.
- public String toString()
- 객체의 문자열 표현을 반환한다.
finalize()메소드
- Object 클래스는 finalize()라는 콜백(callback) 메소드를 정의한다.
- 이것은 객체가 소멸되기 직전에 호출된다.
- Object 클래스의 finalize()에서는 아무 것도 하지 않지만 서브 클래스에서 재정의하여서 자원을 반납하는 등의 정리 과정을 실행할 수 있다
종단 클래스와 종단 메소드
- final 을 붙이면 상속이나 재정의가 불가능하다.