본문 바로가기

Java/이론

[Java] 상속(Inheritance)

A is B는 A는 B이다라는 뜻입니다.

자바에서는 A is B라는 개념이 상속으로 쓰인다고 보시면 됩니다.

클래스에서 다른 클래스로

상속을 할 수 있습니다.

extends라는 키워드를 사용하면

해당 클래스의 모든 기능을 상속 받아 사용할 수 있습니다.

 

예를 들어 동물의 나이와 종류를 표현하는 클래스가 있다고 가정했을 때

public class Animal {

String sort;

int age;

public Animal() {

// TODO Auto-generated constructor stub

}

public Animal(String sort, int age) {

super();

this.sort = sort;

this.age = age;

}

public void printAnimal() {

System.out.println(sort);

System.out.println(age);

}

}

 

이런 식으로 코드가 존재할 것입니다.

 

다른 클래스를 하나 만들어봅시다.

 

public class Cat extends Animal {

}

 

Cat이라는 클래스를 만들었는데요.

이렇게 extends로 Animal클래스를

상속받아오면

animal 클래스의 속성들에 접근할 수 있습니다.

 

public class AMain1 {

public static void main(String[] args) {

Cat c = new Cat();

c.printAnimal();

}}

 

즉 main에서 이렇게 

cat클래스에서 아무것도 정의하지 않아도

Animal의 print메소드를 사용할 수 있게 되는 것입니다.

 

그런데 extends의 사전적 의미는 '연장, 확장' 입니다.

'상속' 이랑은 약간 의미가 다르죠.

위에서는 Animal의 기능만 가져와서 사용할 수 있어야

상속이라고 할텐데

하위 클래스에서 멤버 변수나 메소드를 추가하는 등

확장할 수 있기 때문에 

extends라고 부릅니다.

 

public class Dog extends Animal {

String inhabit;

 

Dog라는 클래스에서 멤버 변수를 확장하고

 

Animal 클래스의 생성자를 오버로딩 해보면

 

public Dog(String sort, int age, String inhabit) {

super(sort, age);

this.inhabit = inhabit;

}}

 

이렇게 Animal 클래스에 변수가 추가되었습니다.

상위 클래스의 메소드를 변경하려면

Override를 해야합니다.

어떻게 사용하는지 알아봅시다.

 

@Override

public void printAnimal() {

super.printAnimal();

System.out.println(inhabit);

}

 

메소드 상위에

@Override를 작성합니다.

@는 Annotation이라고 불리는데

어떤 기능을 자동으로 연결해주는 의미를 갖고 있습니다.

Override는 상속받아온 method의 기능을 바꾸는 것으로

Override시에는 상속 받아온 클래스의 메소드명과

이름이 같아야합니다.

 

이전에 배웠던 Overloading과 이름이 비슷한데

Overloading은 메소드를 만들 때 같은 기능이라면

메소드명을 같게 할 수 있는 기능입니다.

이때 파라미터의 자료형이 다르거나

파라미터의 갯수가 달라야합니다.

 

상속이 필요한 이유는 코드의 중복을 없앰으로써

유지 보수의 비용을 줄이고 시간을 줄이기 위함입니다.중복된 기능이 있으면 개발 단계에서 최대한 제거하는 것이코딩을 효율적으로 할 수 있는 방법입니다.객체지향 프로그래밍에서는 상속을 통해서코드의 중복문제를 어느정도 해결할 수 있습니다.자바의 큰 장점을 지니고 있는 기능이기 때문에사용하는데 익숙해지도록 노력해야겠습니다.

 

 

 

'Java > 이론' 카테고리의 다른 글

[Java] 캡슐화(Encapsulation)  (0) 2024.12.13
[Java] 접근 제어자(Access Modifier)  (0) 2024.12.13
[Java] A has B  (0) 2024.12.12
[Java] 생성자  (0) 2024.12.11
[Java] Static / Final  (0) 2024.12.11