상속의 장점
- 부모 클래스의 코드를 재사용할 수 있다.
- 부모 클리스를 상속 받아서 자식 클래스를 작성하기 때문에 자식 클래스를 빠르게 작성할 수 있다.
- 공통속성과 공통기능을 유지보수(추가/삭제/변경)가 쉬워진다.
- 자식 클래스는 고유속성과 고유기능만을 포함하기 때문에 코드가 단순해진다.
// 상위 클래스, 부모 클래스
public class Parent { ... }
// 하위 클래스, 자식 클래스
public class Child1 extends Parent { ... }
- 자식 클래스는 extends를 사용해 부모 클래스를 상속한다.
Child c1 = new Child1();
- Child1의 모든 조상객체가 생성된다.
- Parent객체와 Child1객체의 super는 각각 자신의 부모객체를 참조한다.
- c1의 필드 혹은 메서드를 실행하면 먼저 Child1 객체에서 찾는다.
없으면 Parent객체에서 찾고, 없으면 모든 클래스의 최고 조상인 Object객체에서 찾는다.
(무엇을 상속받을지 정하지 않았을 땐 모조건 Object가 부모가 된다.)
- private과 생성자는 상속할 수 없지만 this 메소드를 사용하면 간접적으로 접근 및 변경할 수 있다.

class point {
int x;
int y;
}
class Circle {
Point c = new Point();
int r;
}
상속관계
~은 ~이다. (is - a)
예) 소방차는 차다.포함관계
~은 ~을 가지고 있다. (has - a)
예) 원은 점을 가지고 있다.
super()는 부모객체의 생성자 메서드를 호출한다.
(this()는 자신의 생성자를 호출한다.)
모든 생성자 메서드는 첫 번째 수행문에 super()가 자동으로 추가된다.
(단, this() 메서드나 다른 super() 메서드를 호출하는 수행문이 이미 포함되어있는 경우에는 자동으로 추가되지 않는다.)
class Person {
String id;
String name;
// 기본 생성자 메소드
Person() {
// 자동으로 추가된 super() 메서드
// 부모객체(Object)의 생성자 메서드를 호출한다.
super();
}
예)
class Student extends Person {
private String major;
private int grade;
// 기본 생성자 메서드
Student(){
super();
}
// 매개변수가 있는 생성자 메서드
Student(String id, String major, int grad, String name) {
// Person 객체의 Person(Stirng, String)생성자 메소드를 호출한다.
// 즉, 부모객체의 생성자 메서드를 호출한다.
super(id, name);
// this를 이용해 인스턴스 변수에 지역변수의 값을 저장한다.
this.maior = major;
this.grade = grade;
}
}
객체 생성 후 생성자 메소드 실행순서 확인하기
Student student = new Student("hong", "컴퓨터공학과", 3 , "홍길동")
Student() {
super(id, name); ----------------> 1
this.major = major; ----------------> 5
this.grade = grade; ----------------> 5
}
Person(String id, String name) {
super(); ----------------> 2
this.id = id; ----------------> 4
this.name = name; ----------------> 4
}
Object() {
수행문 --------------------> 3
}
패키지
- 클래스가 물리적으로 하나의 클래스파일(.class)인 것과 같이 패키지는 물리적으로 하나의 디렉토리다.
- 모든 클래스는 반드시 하나의 패기지에 포함되어야 한다.
- 지금까지 소스파일을 작성할 때 패키지를 선언하지 않고도 문제가 없었던 이유는 자바에서 기본적으로 제공하는 이름 없는 패키지 때문이다.
패키지 선언하기 package 패키지명;import문
- import문으로 사용하고자 하는 클래스의 패키지를 미리 명시해주면 소스코드에 사용되는 클래스 이름에서 패키지명은 생략할 수 있다.
import문 사용x java.util.Date today = new java.util.Date(); import문 사용 import java.util.Date; ... Date today = new Date(); import문 선언하기 import 패키지명.클래스명; 또는 import 패키지명.*;static import문
- static멤버를 호출할 때 클래스 이름을 생략할 수 있다.
- static멤버를 자주 사용할 때 편리하고 코드가 간결해진다.
static import문 사용x System.out.println(Math.random()); static import문 사용 import static java.lang.Math.random; import static java.lang.System.out; ... out.println(random());