쉽게 배우는 자바2 - JAVA 상속

상속


  • 두 개의 클래스가 있다. 한 클래스가 다른 클래스의 기능을 모두 포함하고 있다면 일일이 코드를 구현할 필요가 없다. 이럴 때 사용하는 기능이 상속이다.
class Cal {
	public int sum(int v1, int v2) {
		return v1 + v2;
	}
}
class Cal3 extends Cal{
	
}
  • extends를 사용하여 Cal3 클래스는 Cal을 상속받았다.
    • Cal3는 비어있지만, sum 메소드를 가지고 있다.
  • 부모 클래스에게 없는 기능은 일반 메소드를 추가하듯이 자식 메소드에 그냥 추가하면 된다.

오버라이드(override)

  • 부모 클래스로부터 받은 메소드는 새롭게 정의할 수 있다. 이를 오버라이드라고 한다.
class Cal3 extends Cal{
	
	public int sum(int v1, int v2) {
		System.out.println("Cal3!!!");
		return v1 + v2;
	}

	public int minus(int v1, int v2) {
		return v1 - v2;
	}
}

이클립스로 오버라이드

  • Source - Override/Implement Methods 기능을 이용하면 부모 클래스의 메소드들을 손쉽게 재정의 할 수 있다.

오버로딩(overloading)

  • 특정 이름을 지닌 메소드가 있더라도, 같은 이름을 지닌 메소드를 또 만들 수 있다.
    • 단, 파라미터가 달라야 한다.
class Cal {
	public int sum(int v1, int v2) {
		return v1 + v2;
	}
	// Overloading
	public int sum(int v1, int v2, int v3) {
		return v1 + v2 + v3;
	}
}
  • 같은 이름의 메소드일지라도, 메소드를 호출할 때는 파라미터의 형식도 모두 고려하기 때문에 프로그램은 각각의 메소드가 애매하다고 판단하지 않다.

super

  • this는 인스턴스 본인을 가리키는 키워드이다.
  • 부모 클래스를 가리키고 싶다면 super을 사용하면 된다.

상속과 생성자

  • 자식 클래스에서 생성자를 만들지 않았다면, 암묵적으로 부모 클래스의 기본 생성자(super())을 호출한다.
    • 인자를 받는 생성자를 만들게 되면 기본 생성자는 암묵적으로 만들어지지 않는다. 직접 명시해주어야 사용 가능하다.
  • 인자가 포함된 생성자를 사용하는 경우 주의해야 한다.
    • 부모클래스에 기본 생성자가 아닌 인자를 주는 생성자만 명시한 경우, 자식 클래스에서 기본 생성자를 호출할 수 없다.
    • 자식클래스에 기본생성자가 아닌 인자를 주는 생성자만 명시한 경우, 자식 클래스에서 기본 생성자가 자동 생성이 되지 않는다.
      • 명시를 해주어야 한다.

다형성

  • 상속 관계에 있는 클래스간의 호환성을 높여주는 기능이다.
  • 부모 클래스의 자료형을 가진 변수를 선언하여 자식 클래스의 인스턴스를 생성할 수 있다.
    ParentClass obj = new ChildClass()

접근 제어자

  • public : 모든 접근을 허용한다.
  • private : 현재 객체 내에서만 허용한다.
  • default : 같은 패키지 내의 클래스에서 접근할 수 있다.
  • protected : 같은 패키지에 있는 객체와 상속관계의 객체들만 접근할 수 있다.

final

  • 현재 클래스에서 자식 클래스를 생성하지 못하게 막을 수 있다.
  • 메소드가 자식 클래스에서 오버라이드 하지 못하게 할 수 있다.
  • 변수를 수정하지 못하게 할 수 있다.

abstract

  • 해당 클래스나 메소드를 재정의하도록 강제한다.
  • abstract 메소드는 선언만 되어 있는 상태이고, abstract 클래스는 인스턴스로 만들 수 없다.

좋은 웹페이지 즐겨찾기