티스토리 뷰

#1 상속

  • 상속은 기존의 클래스를 재활용해 새로운 클래스를 작성하는 것입니다. 
  • 재사용에 유용합니다.
  • java에서 상속은 "클래스명 extends 부모 클래스"처럼 extends 키워드를 사용합니다.
  • java는 다중 상속을 허용하지 않습니다.
    • 다중 상속은 하위 클래스의 코드를 복잡하게 만들어 프로그램을 취약하게 만들고, 버그를 유발할 수 있으며 유지 보수하기 어렵게 만들기 때문입니다.
  • (is-a) 관계에 사용합니다.  동물 -> 포유류 -> 늑대
  • 모든 클래스는 Object 클래스의 자식 클래스입니다.
public class 부모클래스 {

} 

public class 자식클래스 extends 부모클래스 { 
    
}

 

 

"super"키워드

  • 자식 클래스에서 부모 클래스의 멤버를 참조할 때 사용합니다.
  • this는 자기 자신을 가리킬 때 사용했는데 super는 부모를 가리킨다.
public class JavaTest {
    public static void main(String[] args) {
        자식클래스 sample = new 자식클래스();
        sample.print();
    }

}

class 부모클래스{
    String name = "나는 부모!";
}

class 자식클래스 extends 부모클래스 {
    String name = "나는 자식!";

    public void print(){
        System.out.println(super.name); // 출력값 : "나는 부모!"
    }
}

"super()"키워드

  • 부모 클래스의 생성자를 호출합니다.
  • 자식 클래스의 생성자에서만 사용할 수 있습니다.
  • super() 키워드는 생성자 가장 위에 기술되어야 합니다.
  • super() 키워드를 기술하지 않아도 컴파일러가 끼워 넣어줍니다.

 


#2 메소드 오버 라이딩(재정의)

부모 클래스로 상속받은 메서드를 재정의하는 것을 오버 라이딩이라 합니다.

오버 라이딩은 다음 조건을 만족해야 합니다.

  • 이름
  • 매개변수들 (개수, 타입)
  • 반환 타입
public class JavaTest {
    public static void main(String[] args) {
        자식클래스 sample = new 자식클래스();
        sample.print();
    }

}

class 부모클래스{
    public void print(){
        System.out.println("나는 부모!");
    }
}

class 자식클래스 extends 부모클래스 {
    @Override
    public void print() {
        System.out.println("나는 자식!");	// 출력값 : "나는 자식!"
    }
}

 

 

자식 클래스는 부모 클래스의 print() 메서드를 재정의 한 모습입니다. "나는 자식!"이 출력하게 오버 라이딩했기 때문에 실행하면 "나는 자식! 이 출력되는 것을 확인할 수 있습니다.

 

주의!  - 오버 로딩과 오버 라이딩은 같은 건가...?

비슷하기에 헷갈릴 수 있는데 

오버 로딩 - 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다는 것.

 

  • 이를 통해 메서드의 이름을 많이 만들 필요 없습니다. (메서드 네이밍 고민할 필요 없어진다.)
  • 같은 기능을 하는 메소드 하나의 이름으로 사용이 가능합니다.

 


 

 

#3 추상 클래스(abstract class)

메서드가 선언만 된. 구현이 되어있지 않은 메서드를 추상 메서드라 부릅니다.

이러한 추상 메서드가 한 개라도 존재한다면 class 앞에 abstract를 붙여 추상 클래스로 선언하면 됩니다.

abstract class 추상클래스{
    String name = "코코용";
    int level = 0;
    public void print(){} //추상메서드
    public void upLevel(){
        this.level++;
    }
}

추상 클래스를 상속받았다면 추상 메서드를 구현하고 인스턴스화 하면 됩니다. 만약 추상 클래스를 상속받았지만 구현하지 않았다면 상속받은 클래스도 추상 클래스가 됩니다.

 

추상 클래스 특징

  • 완벽하게 구현되어 있지 않기에 인스턴스 화가 불가능합니다.
  • 추상 클래스는 새로운 일반 클래스를 위한 부모 클래스의 용도로만 사용됩니다.

 


 

#4 "Final 키워드"

  • 클래스에 선언 시
    • 해당 클래스의 상속을 금지합니다. 
  • 변수 선언 시
    • 해당 필드 값이 변경되는 것을 금지합니다. (해당 필드에서 초기화하지 않았다면 생성자를 통한 초기화 강제)
  • 메서드 선언시
    • 해당 클래스 타입을 상속받는 서브, 하위 클래스에서 오버 라이딩을 금지합니다.

'개발 > java' 카테고리의 다른 글

[Java] 소수점 이하 0으로 채우기  (0) 2022.10.13
[Java] 인터페이스  (0) 2022.04.08
[Java] 클래스, 메소드, 생성자 정의 방법  (0) 2022.03.24
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday