상속(inheritance)

클래스는 다른 클래스의 멤버를 승계받을 수 있다. 이것을 클래스의 상속이라고 한다. 물려주는 클래스를 슈퍼클래스(부모 클래스)라고 하고, 물려받은 클래스를 서브클래스(자식 클래스) 라고 한다. 서브 클래스는 여러클래스로 만들 수 있지만 부모클래스는 하나이다. 즉, 단일상속만을 허용한다.

자바가 C++과 같이 다중상속을 지원하지 않는이유는 같은 이름을 가진 멤버가 양쪽의 슈퍼클래스로부터 상속받았을때 모호성을 가지기 때문이다. 

상속을 받기 위해서는 extends 를 사용한다.

class Cat extends Animal {    // Cat 은 서브클래스, Animal 은 슈퍼클래스

}


오버라이딩

상속된 메소드와 동일한 이름, 동일한 인수, 동일한 리턴값의 형을 가지는 메소드를 정의하여 메소드 덮어쓰기를 하는 것이다. 서브 클래스 안에서 super를 사용하면 슈퍼클래스의 필드와 메소드를 참조한다. this는 기술된 오브젝트 그 자체를 나타낸다. 오브젝트 내의 필드와 메소드는 앞에 this라는 키워드를 붙이는데 생략해도 상관없다. 메소드의 인수명과 인스턴스의 필드명이 동일할때 쉽게 구분해주는 역할을 한다.

class Greeting {

void bye () { System.out.println("good bye");

}

class Insa extends Greeting {

void bye () {System.out.println("안녕히 계세요");

}



접근제한자

접근제한자는 클래스와 멤버의 성질을 지정한다. 

접근제한자 

오브젝트 안에서 이용 

동일 패키지내 이용

동일 패키지 상속 

외부 패키지 상속 

외부 패키지 이용 

public

protected 

없음 

private 


final 제한자는 필드나 클래스에 붙일 수 있다. final 을 붙이면 필드는 값을 변경할 수 없고, 클래스는 상속할 수 없다.

static  제한자는 필드나 클래스에 붙일 수 있다. static이 붙은 것은 이미 오브젝트가 생성되어 있는것이다. 때문에 따로 오브젝트를 생성하지 않고도 바로 사용할 수 있다. 같은 클래스에서 생성된 오브젝트들은 static을 붙인 필드의 값을 공유한다. static이 붙은 메소드는 어떤 오브젝트에서도 같은 동작을 하게 된다. static 메소드에서 동일 오브젝트내의 멤버를 이용하기 위해서는 멤버에게 static을 붙여야만 한다. static 메소드는 오버라이딩 할 수 없다. 


이 내용은 ANK Co.,Ltd. 저 김성훈 역의 Java가 보이는 그림책에서 요약 발췌하였습니다.

+ Recent posts