Java

Java : 오버라이딩 , 참조변수 생성자 super() , 패키지 클래스 패스

흰색기린 2021. 11. 24. 17:11

오버라이딩(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이 프로그램을 실행할 때, 클래스파일을 찾는 데 기준이 되는 파일 경로를 말한다.