상속은 재사용되는 코드를 하나의 클래스로 따로 묶어서 사용할수있도록 한다.
상속받을 클래스를 Parent라는 이름으로 만들어보자
public class Parent {
String name;
int age;
private int money;
Parent(){
System.out.println("Parent 생성자 호출됨");
}
void printParentInfo() {
System.out.println("name : "+name);
System.out.println("age : "+age);
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
상속할 클래스를 Child 라는 이름으로 만들자
public class Child extends Parent {
// 이 클래스는 Parent클래스가 가지고있는 속성들을 상속받을것이다.
String hobby;
Child(){
System.out.println("Child 생성자 호출됨");
}
void printChildInfo() {
printParentInfo();
System.out.println("hobby : "+hobby);
}
}
# extends를 사용하여 상속받을수있다.
# 상속받은 printParentInfo를 이용하여 printChildInfo를 만들었다.
혹은 제공되는 툴을 사용하여 부모클래스를 상속받을수도 있다.
Superclass를 부모클래스로 지정하여 정하면 된다.

메인에서 데이터를 저장한 후 확인해보자.
public class ParentMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
Parent p = new Parent();
p.name = "부모";
p.age = 50;
p.setMoney(1000000000);
// p.printParentInfo();
// System.out.println("money : "+p.getMoney()+"원");
// 상속받은 Child클래스를 메모리에 생성
Child c = new Child();
c.name = "자식";
c.age = 20;
c.hobby = "게임";
// name과 age는 parent에서 받은것이고 hobby는 child클래스 만의 것이다.
c.setMoney(1000000);
c.printParentInfo();
System.out.println("money : "+c.getMoney()+"원");
c.printParentInfo();
}
}
# Child 클래스는 Parent에서 private된 money는 제한되어 사용할수 없지만 parent의 게터 세터는 사용할수있다.
# 자식클래스는 생성자 호출될때 부모 클래스의 생성자를 먼저 호출한 후 호출된다.
이제 메소드 오버라이딩을 사용해보자.
메소드 오버라이딩은 하나의 클래스 안에서 똑같은 이름의 함수를 여러개 만드는 메소드 오버로딩과 다르게
상속하는 클래스안에서 즉 자식클래스에서 부모클래스에 들어있는 함수 이름을 그대로 사용하며
자식클래스에 맞게 코드를 변경하여 사용하는것이다.
메소드 오버라이딩을 하기위해 printParentInfo와 printChildInfo 둘다 print로 바꿔준다.
부모클래스:
void print() {
System.out.println("name : "+name);
System.out.println("age : "+age);
}
자식클래스:
void printChildInfo() {
super.print();
System.out.println("hobby : "+hobby);
}
# 부모 클래스에 print함수가 있으면 자식클래스도 print함수를 사용할수 있으며 자식클래스에 맞게 print 함수를 따로 작성할수있다.
# super를 사용하여 부모클래스의 print라는것을 알려줄수있다.
source 툴을 사용해서 오버라이드 할수있다.

부모클래스인 Person과 자식 클래스인 Professor를 만들었다.
Person과 Professor 생성자에 바로 데이터를 줘서 객체를 생성한다고 할때
부모클래스인 Person은 아래의 코드로 데이터를 입력할수있게 한다.
public Person(int num, String name, String dept, String address ) {
this.num = num;
this.name = name;
this.dept = dept;
this.address = address;
이제 자식 클래스인 Professor는 아래의 코드로 데이터를 입력하는데
public Professor(int num, String name, String role, String dept, String address, String[] subjects ) {
this.num = num;
this.name = name;
this.dept = dept;
this.address = address;
this.subjects = subjects;
}
부모클래스에서 쓰였던 num, name, dept, address를 자식 클래스에서도 쓰였다.
이렇게 중복으로 사용될수있는 변수는 super 를 이용해서 받을수있다.
public Professor(int num, String name, String dept, String address, String[] subjects ) {
super(num,name,dept,address);
this.subjects = subjects;
}
'Java' 카테고리의 다른 글
| [Java] 다운캐스팅(Downcasting) (0) | 2022.07.05 |
|---|---|
| [Java] 업캐스팅(Upcasting) (0) | 2022.07.05 |
| [Java] 멤버변수 저장하기, 가져오기 : setter, getter (0) | 2022.07.04 |
| [Java] 패키지, 접근제어자: public, private, protected (0) | 2022.07.04 |
| [Java] 생성자와 생성자의 메소드 오버로딩 (0) | 2022.07.01 |
댓글