🍏 개발일기

상속 | super() | 부모클래스 | 자식클래스

보배 진 2025. 10. 20. 10:44

클래스를 한번 쓰고 버리기에 아깝기 때문에

자식 클래스로 상속 시켜서 코드 재사용성을 높인다

 

즉 상속이란 "기존의 클래스를 재사용해서 새로운 클래스를 만드는 것" 

 

 

 

 

상위 클래스 : Point

하위 클래스 : ColorPoint

상속 : class ColorPoint extends Point


Point
  부모클래스
  상위클래스
ColorPoint
  자식클래스
  하위클래스
  파생클래스

 

상속 가능한 문법과 불가능한 문법

[ o ]
class A
class B extends A
class C extends B
class D extends A

 

[ x ]

class A

class B

class C extends A,B // 2개 안 됨

 

 

 

 

 

어느 클래스 출신의 코드인지 보여준다 Point와 colorPoint

 

 

package class01;

class Point {
	private int x;
	private int y;		
	
	// 기본 생성자
	Point(){
		System.out.println("Point 클래스의 기본(디폴트) 생성자");
	}

	void move(int x) {
		this.x += x;
		this.y += y;
	}
	void printInfo() {
		System.out.println("(" + this.x + ", " + this.y + ")");
	}
	
	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}
}

class ColorPoint extends Point {
	private String color;

	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	
}


public class Test01 {
	public static void main(String[] args) {
		
		System.out.println("로그01");
		Point point = new Point();
		System.out.println("로그02");
		ColorPoint cp = new ColorPoint();
		System.out.println("로그03");
		
		point.setX(100);
		point.printInfo();
		
		cp.printInfo();
	}
}

 

 

Point 기본 생성자가 2번 호출되었다
ColorPoint cp = new ColorPoint(); 로 인해

기본생성자가 다시 호출됐음을 알 수 있다

자식의 모든 생성자들은

가장 먼저 부모의 기본 생성자를 호출한다

 

 

 

 

자식은 부모의 기본 생성자를 먼저 호출하기 때문에 에러 발생

Shape(){

}

라는 기본 생성자가 없어 class Circle에 에러가 발생한다

이렇게 기본 생성자를 작성하면 될까?? -> ㄴㄴ

 

1. 설계가 완벽하다
   자식을 코딩중이다? == 부모는 완성되었다!
2. 코드에는 "뜻(뉘앙스)"이 있다!!!
   기본 생성자를 만듦으로써, 뜻이 달라진다

값을 안줘도 이름과 넓이 없는 객체를 생성할 수 있도록 해주겠다고 해석할 수 있게 된다 -> 안 됨.

 

 

[ 해결방법 ]

1. 부모한테 기본 생성자 만들기 = 올바르지 않을 경우가 큼

2. 부모의 다른 생성자를 사용한다

 

 

 


protected : 자식은 접근 가능, 외부에서는 접근 불가능