티스토리 뷰

프로그래밍/java

JAVA - 객체지향(6)

박스여우 2015. 4. 4. 16:58

 

Java - 객체지향(6)

 

 

 

 

상속

JAVA 는 클래스 간의 상속을 통해 또다른 방식의 코딩이 가능합니다.

 

상속이란?

조상의 클래스를 이용하여

새로운 클래스를 작성하는 기능입니다.

 

상속을 이용하면 적은 코드로도 새로운 클래스를 작성할수 있고,

조상코드를 조작하여 코드를 공통적으로

편리하게 관리할수 있는 장점을 가지고 있다.

 

상속에 대해서..

클래스 선언 extends 조상클래스이름

ex) public class sun extends father{}

 

 

public class mother{

    int age;

}

 

public class sun extends mother {}

 

 

 

 

위의 그림을 통해 상속의 관계를 보면 알겠지만,

조상클래스의 멤버는

자손클래스에게 상속이 되어

자손클래스가 자유롭게 사용이 가능합니다.

 

 

 

 

 

 

단일상속

JAVA는 단일상속만을 허용한다.

복합적인 기능을 포기하는대신, 클래스간의 관계가 쉬워진다.

 

단일상속만을 허용하기때문에

클래스간의 관계가 명확해지고, 코드를 신뢰할수 있도록 만들어주는

장점을 얻을수있습니다.

 

 

 

 

 

 

클래스간의 관계

포함관계와 상속관계를 구별짓는 법은

~는 ~를 가지고있다(has ~a)

~는 ~다 (is ~a)

 

포함관계는 인스턴스의 생성을통해 정의를 하면 되고,

상속관계는 말그대로 상속을통해 작성하면 됩니다.

 

 

예시를 들어

노트북은 화면을 가지고있다.

노트북은 화면이다.

 

위의 경우는 후자보다 전자가 더 자연스럽죠?

위와같은 경우는 포함관계이며,

 

스마트폰은 핸드폰을 가지고있다,

스마트폰은 핸드폰이다.

 

위와같은경우는 후자가 더 자연스럽다.

이같은 경우는 상속관계이다.

 

 

 

 

 

 

 

 

 

Object 클래스

상속받는 클래스가 없는 클래스는 자동적으로

extends object 가 컴파일할때 붙는다.

 

모든 클래스는 Object 클래스를 상속받음으로써

Object 클래스에 정의된 멤버를 사용할수 있습니다.

 

ex)toString(),equals() 등의 메서드

 

 

 

 

 

 

오버라이딩

오버라이딩이란 조상클래스로부터 상속받은

메소드의 내용을 변경하는것이다.

 

오버라이딩의 조건

1.이름이 같아야한다.

2.매개변수가 같아야한다.

3.리턴타입이 같아야한다

 

위의 3가지 조건을 합치게 되면,

선언부가 일치해야한다는것이다.

 

 

 

 

 

 

 

 

 

 

오버로딩 VS 오버라이딩

오버로딩은 기존에 없는 새로운 메소드를 정의하는것이고,

오버라이딩은 상속받은 메서드의 내용을 변경하는것입니다.

 

이 두가지를 헷갈려서는 절때 안됩니다.

 

 

 

 

 

 

 

super

자손클래스에서 조상클래스로부터 받은 멤버를

참조하는데 사용되는 참조변수입니다.

(지역변수와 멤버변수의 이름이 같으면 this로 구별한다)

 

자신의 멤버 = this

조상의 멤버 = super

 

사용방법은 this와 같습니다.

 

 

 

this(), super() 생성자

super()은 조상클래스의 생성자를 호출할때 사용됩니다.

 

조상클래스 멤버의 생성과 초기화 작업이 수행되어야 하기때문에

자손클래스의 생성자에서 조상클래스의 생성자가 호출되어야합니다.

 

 

생성자의 첫줄에서 조사을래스의 생성자를 호출해야 하는 이유는,

자손클래스의 멤버가 조상클래스의 멤버를 사용할수도 있으므로

조상의 멤버들이 먼저 초기화되어 있어야 하기때문입니다.

 

 

Object클래스를 제외한 모든 클래스의 생성자는 첫줄에 반드시

자신의 생성자 또는 조상의 생성자를 호출해야합니다.

그렇지 않으면 컴파일러는 생성자의 첫줄에 super();를 자동추가합니다.

 

 

인스턴스를 생성할때 클래스를 선택하는 것만큼 생성자를 선택하는것도 중요합니다.

클래스- 어떤클래스의 인스턴스를 생성할것인가?

생성자- 생성한 클래스의 어떤 생성자를 이용해서 생성할 것인가?

'프로그래밍 > java' 카테고리의 다른 글

Java - JOptionpane 입력받기 - 2  (0) 2015.04.05
Java - Scanner 입력받기  (0) 2015.04.04
java - 객체지향(5)  (0) 2015.04.03
JAVA - 객체지향(4) 생성자  (0) 2015.04.03
java - 객체지향(3)  (0) 2015.04.02
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함