상속이란?
자바에는 상속(Inheritance)이라는 개념이 존재합니다.
쉽게 말해 부모 클래스(상위 클래스)와 자식 클래스(하위 클래스)가 있으며, 자식 클래스는 부모 클래스를 선택해서, 그 부모의 멤버를 상속받아 그대로 쓸 수 있게 됩니다.
상속을 하는 이유는 간단합니다. 이미 마련되어 있던 클래스를 재사용해서 만들 수 있기 때문에 효율적이고, 개발 시간을 줄여주게 됩니다.
부모 클래스 코드
public class Parent {
String name;
int age;
private int money;
Parent(){
System.out.println("Parent 클래스 생성자!");
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
void print() {
System.out.println("name :"+name);
System.out.println("age :"+age);
}
void printMoney() {
System.out.println("name :"+name);
System.out.println("age :"+age);
System.out.println("money :"+money);
}
}
자식 클래스 코드
public class Child extends Parent{
// 상속받을 때 사용하는 키워드가 extends다.
// extends 오른 쪽에 상속받을 클래스명을 쓴다.
// 즉 Parent 클래스의 멤버 변수와 메소드를 상속받는다는 뜻이다.
// 우리 눈에는 안 보이지만 상속받은 코드가 숨어있는 것!!!!!
String hobby;
Child(){
System.out.println("Child 클래스 생성자!!!!!!");
}
}
메인함수 코드
public class PersonMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 메모리 확보
Parent p = new Parent();
// 데이터 저장
p.name = "홍길동";
p.age = 50;
p.setMoney(1000000000);
// 저장된 데이터 출력
// p.print();
// p.printMoney();
// Child 클래스를 객체 생성한다.
Child c = new Child();
// 데이터 저장
c.name = "홍나나";
c.age = 23;
c.setMoney(500000);
c.hobby = "게임";
// 저장된 데이터 확인 ! 출력 !
c.print();
c.printMoney();
}
}
위 코드 실행 결과를 보면
메모리 동작방식을 확인하기 위해 생성자 함수에 print 문을 넣어놨다. 실행 결과
메모리를 확보하는 코드 ( Parent p = new Parent(); )를 한 번만 했지만 상속받은 Child 클래스의 객체를 생성할 때도
부모클래스의 코드가 실행되는 것을 확인할 수 있다.
메소드 오버라이딩 ( Method Overriding)
Child에 있는 hobby 정보까지 같이 출력할 수 있는 함수를 만드려고한다.
이럴 때 새로운 함수를 만들지 않고 상속받은 함수를 재활용하여 코드를 작성할 수 있는 방법을
Method Overriding 메소드 오버라이딩이라고 한다.
사용하는 방법.
코드 작성하는 곳에 마우스 우클릭 -> source -> Override / Implement Methods
@Override
void print() {
// TODO Auto-generated method stub
super.print();
위 코드에서 super란 extends 옆에 있는 상속받은 클래스를 말한다.
내가 원하는 대로 개발을 하고 싶으면 위 코드에서 super.print();를 지우고 아래 코드와 같이 작성을 해도 된다.
@Override
public void print() {
// TODO Auto-generated method stub
System.out.println(name+" "+age+" "+job+" "+hobby);
}
같은 print(); 함수를 썼지만 각각 결과가 다른 모습
수퍼클래스(부모클래스)의 생성자를 호출하는 코드
// 수퍼클래스의 생성자 호출하는 코드.
super(num,name,dept,address);
'Java' 카테고리의 다른 글
Java - 정수 및 실수를 클래스로 생성하는 방법 / 문자열 형변환 / 문자열 함수 (0) | 2023.01.25 |
---|---|
Java - 추상클래스 (abstract)와 인터페이스(interface) (0) | 2023.01.20 |
Java - 접근제어자 / this / getter setter (0) | 2023.01.19 |
Java - 생성자(Constructor) , 생성자 오버로딩 (0) | 2023.01.19 |
Java - 메소드 오버로딩 (Method Overloading) (0) | 2023.01.18 |