본문 바로가기
개발/JAVA

자바 객체지향 (8) - 상속의 문제점

by chansungs 2020. 6. 14.
728x90
반응형

상속의 문제점

// 상속의 문제점
// - 현실 세계에 존재하는 다양한 대상들로부터 공통된 특징을 
//   부모(상위)클래스로 정의한 후, 자식 클래스에서 재사용하는 문점

// 공통기능을 정의하고 있는 부모클래스
class Animal29 {
	public void sound() {
		System.out.println("소리를 냅니다.");
	}
}
// 부모클래스의 기능을 상속받는 자식클래스
class Dog29 extends Animal29 {}
class Cat29 extends Animal29 {}

public class Class_29_Method_Overriding {
	public static void main(String[] args) {		
		Dog29 d = new Dog29();
		Cat29 c = new Cat29();
		
		d.sound();
		c.sound();
	}
}

// 상속의 문제점
// - 현실 세계에 존재하는 다양한 대상들로부터 공통된 특징을 
//   부모(상위)클래스로 정의한 후, 자식 클래스에서 재사용하는 문점

// 메소드 오버라이딩
// 부모클래스에서 물려받은 메소드는 모든 자식클래스에게 동일하게 적용됩니다.
// 이때, 자식 클래스는 부모클래스에서 물려받은 메소드를 자신의 용도에 맞게 
// 재정의 할 수 있습니다.

// 부모클래스의 메소드를 재정의하는 문법으로 자식클래스에서
// 부모클래스의 메소드의 원형을 다시 한번 정의하는 문법입니다.
// 메소드 오버라이딩을 구현하면, 부모클래스에서 물려받은 메소드는 무시되고,
// 새롭게 정의한 메소드가 사용됩니다.

// 메소드의 정의 형식
// 접근지정자 	리턴값의타입	메소드명(매개변수) {내용}
// 메소드의 원형 : 리턴값의타입, 메소드명, 매개변수

// 공통기능을 정의하고 있는 부모클래스
class Animal30 {
	public void sound() {
		System.out.println("소리를 냅니다.");
	}
}
// 부모클래스의 기능을 상속받는 자식클래스
class Dog30 extends Animal30 {
	// 메소드 오버라이딩
	// - 부모클래스의 메소드를 자식클래스의 용도에 맞게
	//   재정의하는 문법
	public void sound() {
		// 부모클래스의 오버라이딩된 메소드를 명시적으로 호출하기 위해
		// super 키워드를 사용할 수 있습니다.
		super.sound();
		System.out.println("멍멍~");
	}
}
class Cat30 extends Animal30 {
	// 메소드 오버라이딩
	// - 부모클래스의 메소드를 자식클래스의 용도에 맞게
	//   재정의하는 문법
	public void sound() {
		// 부모클래스의 오버라이딩된 메소드를 명시적으로 호출하기 위해
		// super 키워드를 사용할 수 있습니다.
		super.sound();
		System.out.println("야옹~");
	}
}

public class Class_30_Method_Overriding {
	public static void main(String[] args) {		
		Dog30 d = new Dog30();
		Cat30 c = new Cat30();
		
		d.sound();
		c.sound();
	}
}

728x90
반응형