Hello

Java 상속(Inheritance)

by 볼빵빵오춘기

상속(Inheritance)

더보기
class 자식클래스 extends 부모클래스{
         //....
}

 

class Parent{}
class Child extends Parent{
	//....
}

 

⇒ Child 와 Parent 클래스는 상속관계이다.

⇒ 부모와 자식관계를 그림으로 그리면 아래 그림과 같다.

  • 기존의 클래스로 새로운 클래스를 작성하는 것 (⇒ 코드의 재사용)
  • 두 클래스를 부모와 자식으로 관계를 맺어주는 것
  • 자손의 조상의 모든 멤버를 상속받는다.(생성자, 초기화블럭 제외)
  • 위에서 ‘부모’가 아닌 ‘조상’이라고 표현한 이유는 부모의 부모까지 모두 상속받기때문이다.
  • 자손의 멤버 개수는 조상보다 적을 수 없다.( ⇒ 같거나 많다.) 
더보기

 

class Parent{
	int age; // <= 멤버 
}

class Child extends Parent{}

 

⇒ 클래스 Parent에서는 멤버가 1개가 있다.

⇒ 클래스 Child 내부에 아무것도 작성되어있지않기 때문에 멤버가 없다 생각이 든다.

⇒ 하지만 Child는 Parent를 상속받았기 때문에 멤버를 1개를 상속받는다.

⇒ 따라서 Child에도 멤버가 1개가 있는것이다.

(즉 자신의 멤버의 갯수는 0개, 상속받은 멤버 1개 ⇒ 토탈 멤버 1개)

 

  • 자손의 변경은 조상에 영향을 미치지 않는다.
더보기

 

class Parent{
	int age; // <= 멤버 
}

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

 

⇒ Child 클래스에 play()라는 메서드를 추가함. Child이 변경되었지만 Parent에 영향을 주지않는다.

⇒ Child 클래스의 멤버는 2개가 된다.

(즉 자신의 멤버의 갯수는 1개, 상속받은 멤버 1개 ⇒ 토탈 멤버 2개)

⇒ 상속을 하면 자식클래스가 확장이 된다. 그래서 extend 키워드를 쓰는것

 

 

예제 코드1

더보기
// 코드1 - 2차원 좌표를 나타내기위한 클래스
class Point { 
	int x;
	int y;
}

 

// 코드2 - 3차원 좌표를 나타내기 위한 클래스1
class Point3D{ 
	int x;
	int y;
	int z;
}
// 코드3 - 3차원 좌표를 나타내기 위한 클래스2
class Point3D extends Point{ 
	int z;
}

 

변수 x,y,z를 갖는 객체를 만든다고 하면

→ ‘코드2’을 보면 Point 클래스와 관계없이 클래스를 새로 만들 수 있고

→ ‘코드3’처럼 Point 클래스를 상속받아서 만들 수 도 있다.

 

여기서 Point 클래스의 변경을 한다하면 

‘코드2’는 Point클래스의 영향을 받지 않지만

 ‘코드3’은 변경의 영향을 받는다.

 

 

예제 코드2

더보기
public class Hello {

	public static void main(String[] args) {
		SmartTv stv = new SmartTv();
		stv.channel = 10;
		stv.channelUp();
		System.out.println(stv.channel);
		stv.displayCaption("Hello World1");
		System.out.println("------");
		stv.caption = true;
		stv.displayCaption("Hello World2");
	}
}

class Tv{
	boolean power;
	int channel;
	
	void power() { power = !power;}
	void channelUp() { ++channel; }
	void channelDown() { --channel; }
	
}

class SmartTv extends Tv{
	boolean caption; // 자막 
	void displayCaption(String text) {
		if(caption) {
			System.out.println(text);
		}
	}
}

 

 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기