/*
 * 오버라이드 ( override )
 * → 상속받은 자식클래스에서 부모클래스의 메서드를 재정의.
 * → 메서드의 형태는 부모클래스의 메서드와 동일해야함.
 * → 재정의 전의 동일한 이름의 메서드는 사용하지 못함.
 * → 접근제한자의 범위가 좁아지는 건 안되고, 동일하거나 더 넓은 범위여야 함.
 * → final 선언된 메서드는 오버라이드 할 수 없음.
 */
package ch03_override;

public class Point {
	private int px;
	private int py;
	
	public Point() {
		System.out.println("- Point() -");
		this.px = this.py = 0;
	}
	
	public Point(int px, int py) {
		System.out.println("- Point(int px, int py) -");
		this.px = px;
		this.py = py;
	}
	
	public int getPx() { return px; }
	public void setPx(int px) { this.px = px; }
	
	public int getPy() { return py; }
	public void setPy(int py) { this.py = py; }
	
	public void twoPoint() {
		System.out.println("좌표 X : " + px + " - Y" + py);
	}
	public void info() {
		System.out.println("좌표 X : " + px + " - Y" + py);
	}
}
--------------------------------------------------------------------------------

//PointTriple
package ch03_override;

/*
 * 상속 ( inheritance )
 * - 기존 class 의 내용을 그대로 가져와서 새로운 class 를 정의하는 것입니다
 * - 상속을 하더라도 접근제한자는 유지 됩니다
 * - 자식클래스 객체를 생성할 때,
 *   자식클래스 생성자에서 super() 를 사용하여 부모클래스의 생성자를 먼저 실행하고,
 *   자식클래스의 생성자를 진행합니다
 * 
 * 상속 방법
 * - class 자식클래스 extends 부모클래스 {
 * 
 *   }
 */

public class PointTriple extends Point {

	private int pz;
	
	public PointTriple() {
		super(); // 부모클래스 생성자 호출
		System.out.println("- PointTriple() -");
	}
	
	public PointTriple(int px, int py, int pz) {
		super(px, py);
		System.out.println("- PointTriple(int px, int py, int pz) -");
		this.pz = pz;
	}
	
	public void threePoint() {
		System.out.println("좌표 X : " + getPx() + " - Y : " + getPy() + " - Z : " + pz); 
	}
	
	public void info() {
		System.out.println("좌표 X : " + getPx() + " - Y : " + getPy() + " - Z : " + pz); 
	}
}
--------------------------------------------------------------------------------

//PointTest
package ch03_override;

public class PointTest {

	public static void main(String[] args) {
		
		Point pointA = new Point(10, 20);
		pointA.twoPoint();

		
		System.out.println();
		
		PointTriple ptA =
				new PointTriple();
		ptA.threePoint();
		
		System.out.println();
		
		PointTriple ptB =
				new PointTriple(11, 22, 33);
		ptB.threePoint();
		ptB.info();
	}
	
}