Java/java

4주차 - 상속 inheritance (1)

우젼 2022. 9. 3. 13:54

자바에는 부모클래스와 자식클래스가 있다.

여기서 상속(inheritance) 이란, 자식클래스가 부모클래스의 멤버를 상속받아 사용하는 것이다.

상속 받는 방법은 클래스 이름 옆에 extends 라는 키워드를 를 입력하고 부모클래스의 이름을 작성하면 된다.
사용 예)

public class 자식 클래스이름 extends 부모 클래스 이름 { }

아래는 부모 클래스 예시

public class Person {
	private String name;
	private int age;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}

여기서 부모 클래스에서는 String 자료형의 name이라는 변수와 int 자료형의 age라는 변수와 setter, getter를 생성했다.


아래는 위의 부모 클래스를 상속받는 자식 클래스의 예시

public class Student extends Person {	

	private String subject;

	public void setSubect(String subect) {
		this.subject = subect;
	}

	public String getSubject() {
		return subject;
	}

	public void info() {
		System.out.println("이름 :" + getName());
		System.out.println("나이 : " + getAge());
		System.out.println("수강 과목 : " + subject);
	}
}

그리고 부모클래스는 여러개의 자식클래스를 가질 수 있다.

하지만 자식 클래스는 하나의 부모클래스만을 가질 수 있다.


아래는 또 다른 자식 클래스가 같은 부모 클래스를 상속 받는 예시 1

public class Employee extends Person {
	// extends '~~' // '~~' 클래스의 데이터 메소드 등을 가져와서 사용한다. 위의 경우 Person 클래스를 상속받는다.
	private String dept;

	public String getDept() {
		return dept;
	}

	public void setDept(String dept) {
		this.dept = dept;
	}

	public void info() {
//		System.out.println("이름 :" + super. name); // 상속이 되었지만 name은 private이다. 
//		System.out.println("나이 : " + age); //Person에서 getAge은 public이기 때문에 값을 가져온다
		System.out.println("이름 :" + super.getName()); // super. 를 보고 부모 객체에서 가져온 데이터임을 알 수 있다.
		System.out.println("나이 : " + getAge()); // super 는 없지만 내부에 getAge()가 없음을 보고 유추할 수 있다.
		System.out.println("부서 : " + dept);
	}
}

같은 부모 클래스를 상속받는 예시 2

public class Professor extends Person {

	private String major;

	public void setMajor(String major) {
		this.major = major;
	}

	public String getMajor() {
		return major;
	}

	public void info() {
		System.out.println("이름 :" + getName());
		System.out.println("나이 : " + getAge());
		System.out.println("전공 : " + major);
	}
}

아래는 자식 클래스들을 이용하는 메인 클래스의 예시

public class Main {
	public static void main(String[] args) {
		Employee emp = new Employee();
		emp.setName("김변수");
		emp.setAge(30);
		emp.setDept("직원");

		Professor pro = new Professor();
		pro.setName("이참조");
		pro.setAge(40);
		pro.setMajor("OT");

		Student stu = new Student();
		stu.setName("박객체");
		stu.setAge(50);
		stu.setSubect("자바");

		emp.info();
		System.out.println();
		pro.info();
		System.out.println();
		stu.info();
	}
}

 

* 알아두면 좋은 정보

여기서 각각의 자식클래스는 모두 Person 이라는 부모클래스를 상속받는다.

이때, 생성되는 부모클래스는 하나의 부모클래스만 생성되는 것이 아니라 각각의 자식클래스 마다 Person이 생성된다.

그렇기 때문에 우리 눈에는 보이지 않지만 컴퓨터 상으로는 3개의 부모클래스가 생성되었다는 것을 알아두면 좋다.