TIL | JAVA 상속(Inheritance) / 클래스 간의 관계 / 상속과 포함 / Object 클래스

김윤희·2022년 8월 1일
0

상속(Inheritance)

상속


  • 기존의 클래스로 새로운 클래스를 작성하는 것(코드의 재사용)
  • 두 클래스를 부모와 자식으로 관계를 맺어주는 것
class 자식클래스 extends(키워드) 부모클래스{ 
	//...
}
class Parent{ }
class Child extends Parent{
	//...
}
  • 자손은 조상의 모든 멤버를 상속받는다 (생성자, 초기화 블럭 제외)

  • 자손의 멤버 개수는 조상보다 적을 수 없다(같거나 많다)

    • 아래의 경우 Child 클래스는 상속받은 멤버변수 age가 있기 때문에 멤버 개수는 1이다
class Parent{
	int age;
}
class Child extends Parent{ }
  • 자손 변경은 조상에 영향을 미치지 않는다
    • 아래의 경우 Child 클래스는 상속받은 멤버변수 하나와 자신 멤버 하나 총 2개이다
class Parent{
	int age;
}
class Child extends Parent{ 
	void play(){
    	System.out.println("놀자!");
    }
}


클래스 간의 관계 / 상속과 포함

포함이란?


  • 클래스의 멤버로 참조변수를 선언하는 것 !
  • 작은 단위의 클래스를 만들고, 이 들을 조합해서 클래스를 만든다
    ✔ 클래스의 관계는 두가지로 나뉘는데 하나는 위에서 설명 된 상속이고, 다른 하나는 포함이다

📝예시

  • 1번
class Circle{
	int x; 		//원점의 x 좌표
    int y;		//원점의 y 좌표
    int z;		//반지름
}
  • 2번
class Circle{
	Point c = new Point(); //원점
    int r;	//반지름
}

class Point{
	int x;
    int y;	
}

✔ 원을 작성하는 방법으로 1,2번 둘 다 맞지만
1번 Circle은 기존 Point 클래스와 관계가 전혀 없고, 2번 Circle은 기존 Point 클래스와 포함 관계에 있다



클래스 간의 관계 결정하기


상속관계 '~은 ~이다 (is - a)'
포함관계 '~은 ~을 가지고 있다 (has - a)'

//포함
class Circle{
	Point c = new Point();
    int z;
}

//상속
class Circle extends Point{
    int z;
}

class Point{
	int x;
    int y;	
}


단일 상속(Single Inheritance)

단일 상속


  • Java는 단일 상속만을 허용한다(c++은 다중상속 허용)
    -아래의 코드로 예를들면 Tv와 DVD에서 각각 power() 메서드가 있고 내용이 다른경우 둘 중 어떤걸 상속받아야 할지 모르니 충돌된다
    ✔인터페이스(interface)를 이용하면 충돌 문제도 해결하면서 다중상속 문제도 해결하게 된다
class TvDVD extends Tv DVD{	//에러! 조상은 하나만 허용한다
	//...
}
  • 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다


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

단일 상속


  • 부모가 없는 클래스는 자동적으로 Object 클래스를 상속받게 된다
    • 컴파일러가 자동 추가해준다
  • 모든 클래스는 Object 클래스에 정의된 11개의 메서드를 상속받는다
    • ex) toString(), equals(Object obj)
class Tv{	// = class Tv extends Object{
	//..
}

class SmartTv extends Tv{
	//..
}

0개의 댓글