package com.java1.day15;
public class PointTestEx21 {
public static void main(String[] args) {
Point3D p3 = new Point3D(1, 2, 3); // 자식 클래스를 생성하면 조상 클래스가 자동으로 생성된다.
System.out.println(p3.x);
System.out.println(p3.y);
System.out.println(p3.z);
System.out.println(p3.getLocation());
}
}
class Point{
int x, y;
Point() {
System.out.println("Point() 생성자!");
}
Point(int x, int y) {
this.x = x;
this.y = y;
}
String getLocation() {
return "x :"+x+", y :"+y;
}
}
class Point3D extends Point{
int z;
Point3D(int x, int y, int z) {
//조상클래스의 멤버변수는 아래처럼 조상의 생성자를 이용해서 초기화 하도록 해야 하는 것이다.
//생성자가 첫줄에서 다른 생성자를 호출 하지 않기 때문에 컴파일러가 super();를 여기에 삽입한다.
//super();가 생략 되어있다.(super()는 Point3D의 조상인 Point클래스의 기본생성자인 Point()를 의미한다.
//그래서 Point의 기본생성자를 주석처리하면 에러가 발생한다.
this.x = x;
this.y = y;
this.z = z;
}
//getLocation() 메서드를 주석 처리하면 Point3D의 부모인 Point클래스에서 getLocation() 메서드를 찾아서 실행한다.
//아래 메서드를 주석 처리하고 테스트 해보자..
@Override //ctrl + space를 활용하면 자동으로 만들어 준다..
String getLocation() { // 오버라이딩 (조상 클래스의 메서드 보다 좁은 범위로 변경할수 없다.
// 조상이 defalut 이므로 여기는 private를 쓸수 없다. 결국 default 이상 접근제한자 사용가능하다.)
//return "x :" + x + ", y :"+ y + ", z :" + z;
return super.getLocation()+", z :"+z; //super를 이용해서 48번 라인을 이렇게 쓸수도 있다.같은 결과 출력.
}
}
Point() 생성자!
1
2
3
x :1, y :2, z :3