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
볼빵빵오춘기