The Debugging Chronicles : "코드의 미학"

클래스의 상속 super 생성자 함수 강제성 본문

JAVA/자바 수업 내용

클래스의 상속 super 생성자 함수 강제성

sweetseonah1004 2024. 7. 29. 16:37
package class02;

// [상속]
// 부모 클래스(상위 클래스)의 코드를
// 자식 클래스(하위 클래스)가 전부 '재사용' 할 수 있다.

// "유지보수 용이성 극대화"
// 코드를 잘게잘게 잘라야함 == 모듈화(컴포넌트화,함수화)
//  --->> 코드 재사용성 증가
// 오류 발견시 수정을 적게함
//  --->> 오류의 파급효과 절감
// 결과를 다양하게 추출할수있음
// 개발시간 단축,개발비용 축소

class Point {
	int x;
	int y;
	Point(int x,int y){
		this.x=x;
		this.y=y;
		System.out.println("부모 생성자 호출됨");
	}
	void printInfo() {
		System.out.println("("+this.x+","+this.y+")");
	}
	void move() {
		this.x++;
		this.y++;
	}
}
// 클래스를 상속받으면
// 해당 클래스의 코드를 전부 재사용할수있다!
class ColorPoint extends Point {
	String color;
	ColorPoint(String color,int x,int y){
		// 자식 클래스의 모든 생성자들은
		// 가장 먼저 부모 클래스의 기본 생성자를 호출한다!
		// 1. 부모 클래스에 기본 생성자를 선언(정의) xxxxx
		//   => 먼저 작성된 코드를 나중에 작성되는 코드때문에 변경한다?
		//   ==> 대부분 잘못된 해결방식...!!
		//  : 기본 생성자를 사용하지않는이유는 "강제성"
		//    기본 생성자를 만들어버린다? 강제성을 잃게됨.....
		// 2. 부모 클래스에게 존재하는 다른 생성자를 대신 사용 O
		super(x,y);
		// 자식 클래스의 객체를 만들때에는
		// 부모 클래스의 생성자 선 호출 --->> 자식 클래스의 생성자 호출
		this.color=color;
		System.out.println("자식 생성자 호출됨");
	}
}


public class Test01 {
	public static void main(String[] args) {

		Point p1=new Point(10,10);
		p1.printInfo(); // 0,0
		p1.move();
		p1.printInfo(); // 1,1
		
		ColorPoint p2=new ColorPoint("초록", 1,2);
		p2.printInfo(); // 분홍(10,20)
		p2.move();
		p2.printInfo(); // 분홍(11,21)
		
		
		
		
		
		
		
		
		
		
	}
}