본문 바로가기
Java/Java 예습

[Java] 자바의 객체 Part.2 예습_1

by 박채니 2022. 1. 20.

안녕하세요, 코린이의 코딩 학습기 채니입니다.

Java 객체를 예습했던 내용을 정리한 포스팅입니다.

 

상속 (Inherit)

: 다른 클래스가 가지고 있는 멤버(필드, 메소드)들을 새로 작성할 클래스에서 직접 만들지 않고 상속을 받음으로써 새 클래스가 자신의 멤버처럼 사용할 수 있는 기능

 

상속의 목적

: 클래스의 재사용

: 연관된 일련의 클래스들에 대한 공통적인 규약 정의

 

상속의 장점

1) 보다 적은 양의 코드로 새로운 클래스 작성 가능

2) 코드를 공통적으로 관리하기 때문에 코드의 추가 및 변경 용이

3) 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여

 

상속의 특징

1) 모든 클래스는 Object 클래스의 후손

Object 클래스가 제공하는 메소드를 오버라이딩하여 메소드 재구현 가능

ex) java.lang.String 클래스의 equals()와 toString()

 

2) 부모클래스의 생성자, 초기화 블록은 상속 안 됨

자식 클래스 생성 시, 부모 클래스 생성자가 먼저 실행

자식 클래스 생성자 안에서 부모 클래스 생성자 호출을 명시하고 싶으면 super() 활용

 

3) 부모의 private멤버는 상속은 되지만 직접 접근 불가

자식 객체 생성 시에 부모의 필드 값도 전달 받은 경우, 자식 생성자 안에서 부모의 private 필드에 직접 접근하여 대입 불가

super() 이용하여 전달 받은 부모 필드 값을 부모 생성자 쪽으로 넘겨서 생성하거나

setter, getter 메소드를 이용하여 접근

 

방법

: 클래스 간의 상속 시에는 extends 키워드 사용

 

표현식

[접근제한자] class 클래스명(자식) extends 클래스명(부모) { }

public class Academy extends Company { }

 

단일 상속과 다중 상속

º 단일 상속

: 클래스 간의 관계가 다중 상속보다 명확하고 신뢰성 있는 코드 작성

: 자바에서는 다중 상속 미지원단일 상속만 지언

 

º 다중 상속

: C++에서 가능한 기능으로 여러 클래스로부터 상속 받으며 복합적인 기능을 가진 클래스를 쉽게 작성 가능

: 서로 다른 클래스로부터 상속 받은 멤버 간의 이름이 같은 경우 문제 발생

 

// 자식클래스

package com.kh.p1.inherit.child.model.vo;

import com.kh.p1.inherit.parent.model.vo.Person;

public class Employee extends Person {
	private int salary;	//월급(만
	private String dept; //부서
	
	public Employee() {}
	
	public Employee(int salary, String dept) {
		this.salary = salary;
		this.dept = dept;
	}
	
	public int getSalary() {
		return salary;
	}
	
	public void setSalary(int salary) {
		this.salary = salary;
	}
	
	public String getDept() {
		return dept;
	}
	
	public void setDeap(String dept) {
		this.dept = dept;
	}
}

package com.kh.p1.inherit.child.model.vo;

import com.kh.p1.inherit.parent.model.vo.Person;

public class Student extends Person {
	private int grade;	//학년
	private String major;	//전공
	
	public Student() {}
	
	public Student(int grade, String major) {
		this.grade = grade;
		this.major = major;
	}
	
	public int getGrade() {
		return grade;
	}
	
	public void setGrade(int grade) {
		this.grade = grade;
	}
	
	public String getMajor() {
		return major;
	}
	
	public void setGrade(String major) {
		this.major = major;
	}
}

 

// 부모 클래스

package com.kh.p1.inherit.parent.model.vo;

public class Person {
	protected String name;	//이름
	protected int age; 	//나이
	protected char gender;	//성별
	protected String addr;	//주소
	
	public Person() {}
	
	public Person(String name, int age, char gender, String addr) {
		this.name = name;
		this.age = age;
		this.gender = gender;
		this.addr = addr;
	}
	
	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 char getGender() {
		return gender;
	}
	
	public void setGender(char gender) {
		this.gender = gender;
	}
	
	public String getAddr() {
		return addr;
	}
	
	public void setAddr(String addr) {
		this.addr = addr;
	}
	
}
@run
package com.kh.p1.inherit.run;

import com.kh.p1.inherit.child.model.vo.Employee;

public class Run {

	public static void main(String[] args) {
		Employee emp = new Employee();
		emp.setName("김씨");
		emp.setAge(17);
		emp.setSalary(2000);
		
		System.out.println(emp.getName() + " (부모 클래스)");
		System.out.println(emp.getAge() + " (부모 클래스)");
		System.out.println(emp.getSalary());
	}

}

@출력값
김씨 (부모 클래스)
17 (부모 클래스)
2000