상속(Inheritance)이란 이미 존재하는 클래스로부터 멤버들을 물려받는 것이다. 

상속되는 클래스를 부모 클래스라하며 슈퍼클래스(Super class)라고도 한다.

자식 클래스는 서브클래스(Sub class)라고도 하며 상속을 받는 클래스를 의미한다.


상속이라고 해서 특별한 의미가 있는 것은 아니다. 현실에서와 비슷하게 그저 부모님의 집을 상속받아 그대로 사용을 하거나 물려받은 집을 보수또는 리모델링(오버라이딩)할 수 있는 것과 같다.


자바에서 클래스를 상속 받기위해서는 클래스 정의후에 옆에 extends를 적고 상속받을 클래스 이름을  쓰면된다.

ex) class SubClass extends SuperClass


그리고 서브클래스는 슈퍼클래스의 멤버와 메소드들 마치 자기 것처럼 사용할 수 있으며 슈퍼클래스 원래의 가시성을 유지한다.

슈퍼클래스에서 public 이었다면 서브클래스에서도 public이다.(일방향성)

하지만 반대로 슈퍼클래스에서는 서브클래스의 멤버와 메소드를 사용할수 없으며, 두개이상의 슈퍼클래스로부터 상속 받을 수 없다.(다중 상속 불가) 또한 슈퍼클래스에서 접근지정자가 private로 선언되어 있으면 서브클래스에서는 사용이 불가능하다. 


하지만 다른 클래스에서 접근은 불가능 하지만 서브클래스만 접근을 할수 있게하는 접근지정자도 있는데 protected가 그것이다.

ex)

private int num1 // 해당클래스만 사용이 가능

protected int num2 // 슈퍼클래스와 서브클래스만 사용이가능

int num3 // 패키지(package)멤버로 같은 패키지내에서만 사용이 가능

public int num4 // 다른 모든 클래스에서 사용이 가능


아래의 코드를 작성하여 보자 이해가 빠를 것이다.


public static void main(String[] args) { //메인 메소드

// TODO Auto-generated method stub

SportsCar c = new SportsCar();

c.color = "Red"; // 슈퍼클래스 이용

c.speedUP(100); // 슈퍼클래스 이용

c.speedDown(30); // 슈퍼클래스 이용

c.setTurbo(true); // 서브클래스 이용

System.out.println(c);

}

class Car { // 슈퍼클래스

int speed;

protected int gear; 

public String color;

public void speedUP(int increment) {

speed+= increment;

}

public void speedDown(int decrement) {

speed-=decrement;

}

}  

class SportsCar extends Car { // 서브클래스

boolean turbo;


public void setTurbo(boolean newValue) {

turbo=newValue;

}

public String toString() {

return "현재의 속도는 "+speed+"\n색상은 "+color+"\nTurbo = "+turbo;

}

}





[출처] http://enter.tistory.com/108

블로그 이미지

532

처음 프로그래밍을 시작한 개발자들은 Hello World!를 기억 할 것이다. Hello world가 Hell World가 될 줄 몰랐던 한 개발자의 이야기. 게시글의 출처를 표기하며, 출처를 남기지 않고 펌을 하는것에 대해 법적 책임을 묻지 않습니다.

,