29일 차 - Is A 관계, 오버라이딩 (다형성) (23.02.06)

yvonne·2023년 2월 6일
0

📂Java

목록 보기
29/51
post-thumbnail

1. Is A 관계와 Has A 관계

📌IS A 관계(is a relationship, inheritance) 는 일반적인 개념과 구체적인 개념의 관계 - 상속으로 연결

  • '~은 ~이다' 의 관계

  • ex) 소는 동물이다.

class Animal {
}
.
.
.

class Cow extends Animal {
}
.
.
.


📌HAS A 관계(has a relationship, association) 는 일반적인 포함 개념의 관계 - 상속 사용 X

  • HAS A 관계는 다른 클래스의 기능(변수 혹은 메서드)을 받아들여 사용
  • ex ) cpu, 메모리와 컴퓨터와의 관계
class Computer {
	CPU cpu;
    Memory memory;
}
.
.
.



2. 다형성(polymorphism)이란?

  • 하나의 부모에 여러명의 자식이 있는 구조
  • 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 하는 것
  • 조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스 참조
  • 반대로 자손 타입의 참조변수로 조상 타입의 인스턴스를 참조하는 것은 불가능
  • TV class = 부모
  • SmartTV class = 자손

TV t = new SmartTV();	 → 가능
SmartTV s = new TV(); 	→ 불가능



3. 아래가 되지 않는 이유에 대해 메모리 그림으로 설명하시오.

SmartPhone ph2 = new MobilePhone();



4. 아래가 되지 않는 이유에 대해 메모리 그림으로 설명하시오.

MobilePhone ph2 = new SmartPhone("010-999-333", "Nougat");

ph2.playApp();



5. 다음을 만족하는 클래스 Employee를 작성하시오.

  • 클래스 Employee(직원)은 클래스 Regular(정규직)와 Temporary(비정규직)의 상위 클래스
  • 필드: 이름, 나이, 주소, 부서, 월급 정보를 필드로 선언
  • 생성자 : 이름, 나이, 주소, 부서를 지정하는 생성자 정의
  • 메소드 printInfo() : 인자는 없고 자신의 필드 이름, 나이, 주소, 부서를 출력

6. 다음을 만족하는 클래스 Regular를 작성하시오.

  • 클래스 Regular는 위에서 구현된 클래스 Employee의 하위 클래스
  • 생성자 : 이름, 나이, 주소, 부서를 지정하는 상위 생성자 호출
  • Setter : 월급 정보 필드를 지정
  • 메소드 printInfo() : 인자는 없고 "정규직"이라는 정보와 월급을 출력

package inhertest;

class Employee {
	private String name, depart, address;
	private int age, pay;

	public Employee(String name, int age, String add, String dep) {
		this.name = name;
		this.age = age;
		this.address = add;
		this.depart = dep;

	}

	public void PrintInfo() {
		System.out.println("이름: " + name);
		System.out.println("나이: " + age);
		System.out.println("주소: " + address);
		System.out.println("부서: " + depart);
	}

	public void setPay(int pay) {
		this.pay = pay;
	}

	public int getPay() {
		return pay;
	}

}

class Regular extends Employee {

	public Regular(String name, int age, String add, String dep, int pay) {
		super(name, age, add, dep);		// 부모 클래스의 필드 가져오기
		setPay(pay);	// 부모 클래스의 함수를 가져올 때는 super 사용 안해도 가능
	}

	public void PrintInfo() {
		super.PrintInfo();		// 자식 클래스와 부모 클래스 함수 이름이 같기 때문에 super 붙여야 함
		System.out.println("고용형태: 정규직");
		System.out.println("월급: " + getPay());
	}
}

public class PolyTest {

	public static void main(String[] args) {
		Employee ep = new Regular("민정", 28, "경기도 평택시", "IT부", 5000000);
		ep.PrintInfo();
	}

}

  • 출력결과
profile
개발 연습장

0개의 댓글