본문 바로가기
JAVA/예제

[JAVA] 예제로 알아보는 상속 (1) 상속의 개념과 IS-A 관계

by 부먹짱 2022. 4. 14.
반응형

(2) 생성자와 super

 

[JAVA] 예제로 알아보는 상속 (2) 생성자와 super

자바의 상속을 예제를 통해 정리하였다. (1) 상속의 개념과 IS-A 관계 (2) 생성자와 super (3) 오버로딩과 오버라이딩 생성자 객체를 선언하면 생성자는 자동으로 호출된다. 상속 관계에서 자식 클래

bumukisbest.tistory.com

(3) 오버로딩과 오버라이딩

 

[JAVA] 예제로 알아보는 상속 (3) 오버로딩과 오버라이딩

자바의 상속을 예제를 통해 정리하였다. ▽ 링크 (1) 상속의 개념과 IS-A 관계 (2) 생성자와 super (3) 오버로딩과 오버라이딩 오버로딩 (Overloading) 상속과는 크게 관련없지만 오버라이딩과 함께 보면

bumukisbest.tistory.com

 

상속 (Inheritance)

클래스 상속을 위해서는extends 라는 키워드를 사용한다.

자식 클래스는 상속받은 부모 클래스의 멤버를 사용할 수 있다.

 

class Person {
	public void Func1(){
		System.out.println("this is parent Func1");
	}
	public void Func2(){
		System.out.println("this is parent Func2");
	}
}; // 부모 클래스

class Minsu extends Person {
}; // 자식 클래스

public class Main {
	public static void main(String[] args){
		Minsu minsu = new Minsu();
		minsu.Func1(); // 부모 클래스의 멤버 함수
		minsu.Func2();
	}
}

 

반응형

 

IS-A 관계

Person 클래스를 상속한 Minsu 클래스는 Person 클래스의 하위 개념이라고 볼 수 있다.

이는 "민수는 사람이다." "Minsu is a Person" 라고 표현할 수 있는데 이러한 관계가 바로 IS-A관계 즉, 상속관계이다.

 

Person minsu = new Minsu(); // Ok
Minsu person = new Person(); // Error

 

위의 결과를 보면 Minsu 자료형으로 Person 객체를 생성하는 것은 가능하지만,

Person 자료형으로 Minsu 객체를 생성하려고 하면 에러가 난다.

 

민수라는 자료형으로 사람 객체를 만들 수 있다.

민수는 사람이기 때문에 공통된 사람의 특성을 갖기 때문이다.

 

반면, 사람이라는 자료형으로 민수 객체를 만들 수는 없다.

왜냐하면 민수는 수많은 사람 중 하나이고 사람 자료형만으로는 민수를 모두 표현할 수 없기 때문이다.

 

 

※ 추가로 민수(자식) 자료형으로 사람(부모) 클래스를 만들 경우 아래를 주의해야 한다.

 

class Person {
	public void Func1() {
		System.out.println("this is parent Func1");
	}
}; // 부모 클래스

class Minsu extends Person {
	public void Func1() {
		System.out.println("this is child Func1");
	}
	public void Func2() {
		System.out.println("this is child Func2");
	}
}; // 자식 클래스

public class Main {
	public static void main(String[] args) {
		Person minsu = new Minsu();
		minsu.Func1();
		minsu.Func2(); // error
	}
}

에러를 제외한 결과

 

사람 클래스를 민수 자료형으로 만들었기 때문에 멤버의 내용은 민수 클래스로 나타나지만,

이는 민수 자료형으로 만들었다 한들, 사람 클래스이기에 사람 클래스의 멤버만 사용할 수 있다.

 

어찌 보면 당연한 이야기지만 헷갈릴 수 있는 부분이다.

 

반응형

댓글