JAVA - 상속(inheritance)

jodbsgh·2022년 3월 20일
0

💡"JAVA"

목록 보기
18/67

상속의 정의와 장점

상속

  • 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것
  • 상속을 통해서 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 축 ㅏ및 변경이 매우 용이하다.
  • 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다.
class Child extends Parent{
	//상속 방법은 extends 뒤에 상속할 클래스명을 적으면 됨
}
  • 조상클래스: 부모(parent)클래스 = 상위(super)클래스 = 기반(base)클래스
  • 자손 클래스: 자식(child)클래스 = 하위(sub)클래스 = 파생된(derived)클래스
class Parent{
	int age;
}
class Child extends Parent{

}

자손 클래스는 조상의 멤버를 모두 상속받기 때문에, Child클래스는 자동적으로 age라는 멤버변수가 추가된 것과 같은 효과를 얻는다.

class Parent{
	int age;
}
class Child extends Parent{
	
    void play()
    {
    	System.out.println("놀자~");
    }
}

Child 클래스의 새로운 코드가 추가되어도 조상인 Parent클래스는 아무런 영향도 받지 않는다.

  • 생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다.
  • 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다.
class Parent{
	int age;
}
class Child extends Parent{

}
class Child2 extends Parent{

}

Child, Child2 모두 Parent 클래스와 서로 상속관계에 있지만 서로 아무런 관계도 성립하지 않는다.

만일 자손클래스에 자손클래스를 또 상속하면 조상 클래스의 멤버도 함께 생성되기 때문에 조상 클래스의 인스턴스를 생성하지 않고도 조상 클래스의 멤버들을 사용할 수 있다.

자손 클래스의 인스턴스를 생성하면 조상 클래스의 멤버와 자손 클래스의 멤버가 합쳐진 하나의 인스턴스로 생성된다.

클래스간의 관계 - 포함관계

클래스 간의 포함관계를 맺어 주는 것은 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것을 뜻한다.

class Cicle{
	int x;		// 원점의 x 좌표
    int y;		// 원점의 y 좌표
    int r;		// 반지름(radius)
}

class Point {
	int x ; 	// x 좌표
    int y ; 	// y 좌표
}

Pint클래스를 재사용해서 Circle클래스를 작성

class Cicle{
	Point c = new Point();	//원점
    int r;		// 반지름(radius)
}

클래스간의 관계 설정하기

Point 클래스를 포함시키는 대신 상속관계를 맺어 주기

class Circle extends Point{
	int r;
}

Circle 클래스를 작성하는데 있어서 Point 클래스를 포함시키거나 상속받도록 하는 것은 결과적으로 차이가 없어보인다.
그럴 때는 '~은 ~이다', '~은 ~을 가지고 있다'를 넣어서 문장을 만들어보면 클래스 간의 관계가 명확해진다.

원은 점이다. - 포함관계로 작성이 유리
원은 점을 가지고 있다. - 상속관계로 작성이 유리

단일 상속(single inheritance)

자바에서는 단일상속만을 허용한다.
단일 상속으로 클래스 간의 관계가 보다 명확해지고 코드를 더욱 신뢰할 수 있게 만들어 준다.

Object클래스 - 모든 클래스의 조상

Object 클래스는 모든 클래스 상속계층도의 최상위에 있는 조상클래스이다. 다른 클래스로 부터 상속 받지 않는 모든 클래스들은 자동적으로 Object클래스로부터 상속받게 한다.

  • toString(), equals() 와 같은 메서드를 따로 정의하지 않고도 사용할 수 있던 이유는 Object 클래스에 정의된 것들이기 때문
profile
어제 보다는 내일을, 내일 보다는 오늘을 🚀

0개의 댓글