Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

햄발

상속 (Inheritance) 본문

Java

상속 (Inheritance)

햄발자 2024. 4. 23. 16:18

 

 

상속

  • 상속(Inheritance)은 객체 지향 프로그래밍에서 중요한 개념 중 하나이다.
  • 상속은 기존의 클래스를 확장하여 새로운 클래스를 정의하는 메커니즘을 말한다.
  • 상속을 통해 기존 클래스의 속성과 메서드를 재사용하고 확장하여 새로운 클래스를 만들 수 있다.

 

부모 클래스(Parent Class) 또는 슈퍼 클래스(Superclass)

기존에 정의된 클래스로, 상속의 대상이 되는 클래스입니다. 부모 클래스의 속성과 메서드를 자식 클래스에게 상속합니다.

 

 

자식 클래스(Child Class) 또는 서브 클래스(Subclass)

부모 클래스를 확장하여 새롭게 정의되는 클래스입니다. 자식 클래스는 부모 클래스의 모든 속성과 메서드를 상속받습니다.

 

Bottom up 방식 사용하기

 

 

 

 

오버라이드

오버라이드(Override) 란 상속 관계에서 부모 클래스에 정의된 메서드를 자식 클래스에서 재정의 하는 것을 말한다. 즉,자식 클래스에서 부모 클래스의 메서드를 새로운 내용으로 구현하는 것이다. 이렇게 하면 자식 클래스는 부모 클래스의 메서드를 덮어쓰게 되므로, 부모 클래스의 메서드 대신에 자식 클래스에서 정의한 메서드가 호출된다.

 

 

예시

package basic.ch17;

// 상상력 추가
// 선임이 작성한 코드라고 가정 
public class A {
	
	String name; 
	int height; 
	int weight; 
	int age; 
	
	 
}
// 단. 하나의 자바 파일안에 여러개의 클래스를 작성할 수 있다. 
// 단, public 클래스는 오직 하나만 정의 가능하다. 

// 복사 붙여 넣기도 가능 
class B {
	
	String name; 
	int height; 
	int weight; 
	int age; 
	
	int level; 
	String nickName; 
}

// 상속이라는 문법을 배운 개발자라면 
class C extends A {
	
	int level;
	int nickName; 
	String phone; 
}
package basic.ch17;

/**
 * OOP란? 
 * 객체와 객체간에 관계를 형성하고 
 * 상호작용하게 코드를 설계해 나가는 것 
 * 
 * 상속 
 */
public class CTest {

	public static void main(String[] args) {
		
		C c = new C();
		c.name = "A";

	} // end of main 

} // end of class
package basic.ch17;

public class Cal {
	
	public int sum(int n1, int n2) {
		return n1 + n2; 
	}
	
	public int multiply(int n1, int n2) {
		return n1 * n2;
	}
	
	// 코드 테스트 
	public static void main(String[] args) {
		
		Cal2 cal2 = new Cal2();
		System.out.println(cal2.sum(5, 3));
		System.out.println(cal2.minus(10, 3));
		System.out.println(cal2.multiply(10, 0));
		
		
	} // end of main 
	
}

class Cal2 extends Cal {
	
	public int minus(int n1, int n2) {
		return n1 - n2; 
	}
	
	// 부모 코드의 기능을 변경하고 싶다면 --> 재정의 하고 싶다면 
	// 오버라이드 처리 한다. 
	public int multiply(int n1, int n2) {
		// a 또는 b --> 논리 연산자 --> 논리 합 --> 둘중에 하나라도 true 라면 --> true 이다. 
		// a 그리고 b --> 논리 연산자 --> 논리 곱 --> 전부 true 이여야 --> true 이다. 
		if(n1 == 0 || n2 == 0) {
			System.out.println("0을 입력하지 마시오");
		}
		return n1 * n2;
	}
	
}

 

 

부모 클래스가 먼저 존재해야 자식 클래스가 생성 될 수 있다.

super.  ←  부모 객체를 가리킨다.

 

예시

package basic.ch17;

public class Cal {
	
	public Cal() {
		System.out.println("Cal()  부모 생성자 호출");
	}
	
	public int sum(int n1, int n2) {
		return n1 + n2; 
	}
	
	public int multiply(int n1, int n2) {
		System.out.println("2. 호출");
		System.out.println("여기는 부모 클래스 메서드 입니다. ");
		return n1 * n2;
	}
	
	// 코드 테스트 
	public static void main(String[] args) {
		
		Cal2 cal2 = new Cal2();
		System.out.println(cal2.sum(5, 3));
		System.out.println(cal2.minus(10, 3));
		System.out.println(cal2.multiply(10, 0));
		
		
	} // end of main 
	
}

class Cal2 extends Cal {
	
	public Cal2() {
		System.out.println("Cal2() 자식 생성자 호출");
	}
	
	public int minus(int n1, int n2) {
		return n1 - n2; 
	}
	
	// 부모 코드의 기능을 변경하고 싶다면 --> 재정의 하고 싶다면 
	// 오버라이드 처리 한다. 
//	public int multiply(int n1, int n2) {
//		// a 또는 b --> 논리 연산자 --> 논리 합 --> 둘중에 하나라도 true 라면 --> true 이다. 
//		// a 그리고 b --> 논리 연산자 --> 논리 곱 --> 전부 true 이여야 --> true 이다. 
//		if(n1 == 0 || n2 == 0) {
//			System.out.println("0을 입력하지 마시오");
//		}
//		return n1 * n2;
//	}
	
	@Override // <-- 애노티이션, 어노테이션 --> 주석 + 힌트   
	public int multiply(int n1, int n2) {
		System.out.println("1. 호출");
		return super.multiply(n1, n2);
	}
	
}

 

 

package basic.ch17;

public class Hero {
	
	String name; 
	int hp; 
	
	public Hero(String name, int hp) {
		this.name = name; 
		this.hp = hp; 
	}
	
	void attack() {}
}
package basic.ch17;

public class Warrior extends Hero {

	public Warrior(String name, int hp) {
		super(name, hp);
	}
	
	// 오버라이드 
	@Override
	void attack() {
		System.out.println("전사가 기본 공력을 합니다");
	}
	
	void vomboAttack() {
		System.out.println("전사가 2단 공격을 합니다.");
	}

}
package basic.ch17;

public class Wizard extends Hero {

	public Wizard(String name, int hp) {
		super(name, hp); // 부모 생성자 호출 
	}
	
	@Override
	void attack() {
		System.out.println("마법사가 기본 공격을 합니다.");
	}
	
	void freezing() {
		System.out.println("마법사가 얼음 공격을 합니다");
	}

}

'Java' 카테고리의 다른 글

연관, 의존 관계  (1) 2024.04.23
Composition (포함관계)  (0) 2024.04.23
메서드 오버로딩  (0) 2024.04.23
배열  (0) 2024.04.22
static 메소드 (함수)  (0) 2024.04.19