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 |