Backend/문제 풀이

[Java] Inheritance(상속) 예제

Deeb 2021. 9. 8. 17:53

📝Person &Student

-값을 생성하고 출력하는 예제

 

VO 클래스  - Person

:  getter/setter + 필드 정보를 한 번에 출력하는 용도의 메서드

package edu.kh.Inheritance.ex.model.vo;

public class Person {
	
	//필드
	private String name;
	private int age;
	private String nationality;
	
	//생성자 : 객체 생성 + 객체 생성 시 필드 초기화 + 특정 기능 수행
	public Person() {} //기본 생성자
	
	//매개변수 있는 생성자
	public Person( String name, int age, String nationality ) {
		this.name = name;
		this.age = age;
		this.nationality = nationality;
		
		//this 참조 변수: 객체 생성 시 내부에 같이 생성 되며, 객체의 시작 주소를 참조
	}
	
}

 !!조건!! 생성자를 하나도 작성하지 않은 경우
➡ *컴파일러*가 자동으로 기본 생성자를 추가해준다.

 

vo  클래스 - student

package edu.kh.Inheritance.ex.model.vo;

public class Student {
		
	// 학생이 가지고 있어야하는 필드
	// 필드
	private String name;
	private int age;
	private String nationality;
	
	private int grade; // 학년
	private int classRoom; // 반
	
	//생성자
	public Student() { } // 기본 생성자

	//getter/setter
	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;
	}

	public String getNationality() {
		return nationality;
	}

	public void setNationality(String nationality) {
		this.nationality = nationality;
	}

	public int getGrade() {
		return grade;
	}

	public void setGrade(int grade) {
		this.grade = grade;
	}

	public int getClassRoom() {
		return classRoom;
	}

	public void setClassRoom(int classRoom) {
		this.classRoom = classRoom;
	}
	
	
	
}

➡ 한 프로그램안에 중복되는 클래스가 있다. 

Person과 Student의 의미적으로, 추상적으로 부를수 있는것이 부모가 되기 때문에 Person은 부모 클래스

Student는 자식 클래스

-> 학생은 사람이다 : o / 사람은 학생이다 : x (모든 사람이 학생이 아니기 때문이다)

=> 부모로부터 중복되는 부분을 받아서 쓸 것이다.

 

 private String name; private int age; private String nationality;  + 이것들의 getter/setter 지우기

 

 

vo  클래스 - student : 부모 클래스로부터 상속

package edu.kh.Inheritance.ex.model.vo;
    
public class Student extends Person {
	private int grade; // 학년
	private int classRoom; // 반

	//생성자
	public Student() { }
    
    //Student getter/setter
    public int getGrade() {
		return grade;
	}

	public void setGrade(int grade) {
		this.grade = grade;
	}

	public int getClassRoom() {
		return classRoom;
	}

	public void setClassRoom(int classRoom) {
		this.classRoom = classRoom;
	}
}

👉public class Student extends Person {}

: extends로 확장하고 부모클래스명 작성

➡ Person 클래스와 중복되는 필드, 메서드를 물려받아 사용  -> 중복되는 내용 제거


InheritanceService 클래스

package edu.kh.Inheritance.ex.model.service;

import edu.kh.Inheritance.ex.model.vo.Person;
import edu.kh.Inheritance.ex.model.vo.Student;

public class InheritanceService {
	public void example1() {
		//Person, Student 상속 확인
		
		// 1) Person 객체 생성
		
		Person p1 = new Person(); //기본생성자
		p1.setName("봉국");
		p1.setAge(20);
		p1.setNationality("대한민국");
		
		// 2) Student 객체 생성
		Student s1 = new Student();
		
		
		// s1. 입력 후 상속 받은 부모의 setter/getter가 자동완성 구문에 포함되어있는지 확인!!
		s1.setName("봉봉봉");
		s1.setAge(5);
		s1.setNationality("프랑스");
		// ↑ 상속받은 메서드 3개 
		
		s1.setGrade(3);
		s1.setClassRoom(1);
		
	}
}

➡ s1. 입력 후 상속 받은 부모의 setter/getter가 자동완성 구문에 포함되어있는지 확인!!

 잘 되었다면 상속 되었다는 증거

p1에 존재하는 멤버 변수..?

 

setAge :

부모의 int값이 리턴되는데 Person 객체의 메서드이다. 


InheritanceRun 클래스

 

package edu.kh.Inheritance.ex.run;

import edu.kh.Inheritance.ex.model.service.InheritanceService;

public class InheritanceRun {
	public static void main(String[] args) {
		InheritanceService service = new InheritanceService();
		service.example1();	
	
	}
}

➡ 상속된 결과까지 잘 나온다. 

반응형