Java : 오버라이딩 , 참조변수 생성자 super() , 패키지 클래스 패스
오버라이딩(overriding)
- 상속받은 조상의 메서드를 자신에 맞게 변경하는 것
- override 덮어 쓰다
class Ramen{
String soup; // 라면 스프
String noodle; // 라면의 면
String getExplain(){ // 라면 설명 메서드
return "soup : " + soup + "noodle : " + noodle;
}
}
class SinRamen extends Ramen{
String stuff; // 건더기
String getExplain(){ // 오버라이딩
return "soup : " + soup + "noodle : " + noodle + "stuff : " + stuff;
}
}
오버라이딩의 조건
1. 선언부가 조상 클래스의 메서드와 일치해야 함
2. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다
참조변수 super
- 객체 자신을 가리키는 참조변수. 인스턴스 메서드(생성자)내에만 존재
- 조상의 멤버를 자신의 멤버와 구별할 때 사용
class Parent { int x = 10; }
class Child extends Parent{
int x = 20;
void method(){
System.out.println("x=" + x);
System.out.println("this.x=" + this.x);
System.out.println("super.x=" + super.x);
}
}
출력되는 값을 예측해보면
일단 x는 Child 가까운 인스턴스 변수에 담긴 20을 가리킨다
this 또한 자기자신을 가리키는 20
super는 부모를 가리키는 10을 호출시킨다.
만약 Child 클래스에 int x = 20;이 없으면 조상의 10이 호출이 된다.
super() - 조상의 생성자
- 조상의 생성자를 호출할 때 사용
- 조상의 멤버는 조상의 생성자를 호출해서 초기화
- 생성자의 첫 줄에는 반드시 생성자를 호출해야 한다.
그렇지 않으면 컴파일러가 생성자의 첫 줄에 super();를 삽입
class Ramen{
String noodle; // 면
public Ramen(String noodle){
this.noodle = noodle;
}
}
class SinRamen extends Ramen{
String stuff;
public SinRamen(String noodle,String stuff){
this.noodle = noodle;
this.stuff = stuff;
}
}
패키지(package)
- 서로 관련된 클래스의 묶음
- 패키지는 소스파일의 첫 번째 문장으로 단 한번 선언
- 같은 소스 파일의 클래스들은 모두 같은 패키지에 속하게 된다
- 패키지 선언이 없으면 이름없는(unnamed) 패키지에 속함
- 클래스의 실제 이름(full name)은 패키지를 포함.(java.lang.String) rt.jar는 클래스들을 압축한 파일
rt는 runtime을 의미함.
rt.jar는 zip파일하고 비슷해서 풀 수 있음, jar.exe로 압축해제 가능
자바 프로그램이 실행될때 필요한 클래스들의 묶음을 rt.jar에서 갖고 있음.
클래스 패스(classpath)
- 클래스 파일(*.clas)의 위치를 알려주는 경로(path)
- 환경변수 classpath로 관리하며, 경로간의 구분자는 ';'를 사용
classpath(환경변수)에 패키지의 루트를 등록해줘야 함.
JVM이 프로그램을 실행할 때, 클래스파일을 찾는 데 기준이 되는 파일 경로를 말한다.