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)
}
}