KOSTA 8일차) 접근제어자 / 상속 / 다형성

해버니·2023년 2월 26일
0

KOSTA

목록 보기
11/32
post-thumbnail

🌙 접근제어자 🌙

데이터를 어디까지 사용할 수 있게 범위를 설정할건지 정하려고











🌙 상속 🌙


❓ 왜 사용해 ❓

코드 재사용성을 높이기 위해 사용 (1차원적인 목적)
다형성을 위해서




추출한 객체 샘플들 중에서 중복 내용이 많은 객체들을 추출
이 객체의 공통점을 뽑아서 부모 클래스로 만들고 이 클래스를 상속받아 확장하는 형태로 구현하는 것.





예를 들어 학생, 교수, 교직원이 있다. 각각 요소가 있다.


학생
번호
이름
전화
학과
수강과목


교수
번호
이름
전화
학과
개설과목


교직원
번호
이름
전화
부서
직무



→ 공통점을 추출해서 부모 클래스로 만든다.
(번호, 이름, 전화, 부서가 같다.)


class Person{ // 상위 클래스
	int num;
	String name;
	String tel;
	String dept;
} 

// Person을 상속받는 Student클래스 정의, 하위 클래스
class Student extends Person{ // extends: 클래스 상속 키워드
	String[] subjects; // 수강과목
}

class Prof extends Person{ 
	String[] open; // 개설과목
}

class Staff extends Person{ 
	String job; // 직무
}

공통되는 부분을 따로 뽑아 부모로 만들어주고 상속을 받아서 사용한다.






예제

package Inherit;

class Parent {
	private int a; // 상속이 안됨
	int b;
	public int c;
	protected int d; // 같은 패키지내에서는 public. 다른 패키지에서는 상속관계 클래스에만 보임

	public Parent() { // 상속이 안됨
		System.out.println("Parent 생성자");
		a = 1;
		b = 2;
		c = 3;
		d = 4;
	}

	public void f1() {
		System.out.println("Parent method");
		System.out.println("a: " + a);
		System.out.println("b: " + b);
		System.out.println("c: " + c);
		System.out.println("d: " + d);
	}
}

class Child extends Parent {
	int x;

	public Child() {
		System.out.println("Child 생성자");
		// a=10;
		b = 20;
		c = 30;
		d = 40;
		x = 11;
	}

	public void f2() {
		System.out.println("Child method");
		System.out.println("b: " + b);
		System.out.println("c: " + c);
		System.out.println("d: " + d);
		System.out.println("x: " + x);
	}
}

public class ParentMain {
	public static void main(String[] args) {
		Parent p = new Parent();
		p.f1();
		
		Child c = new Child();
		c.f1();
		c.f2();
	}
}






Chilc c = new Child();

를 선언하면 결과 출력창에



Parent 생성자
Child 생성자

라고 나온다.
하위 클래스를 생성하면 상위 클래스가 생성되고 그 다음에 하위 클래스가 생성되는 것이다.






체크사항

✔ 하위클래스는 상위클래스의 private생성자만 빼고 다 물려받는다.

다중 상속 불가
부모는 한 개여야 하고 자식은 여러개여도 된다.
여러 대를 거쳐서 상속도 가능
(C++이나 파이썬은 다중 상속이 가능하다.)

메서드 재정의(오버라이딩)
부모로부터 받은 메서드를 하위 클래스에 적합하게 수정해서 사용
메서드 프로토타입(껍데기) 변경하지 말고 블록 안에 내용만 수정

this → 현재 객체 상속값
super → 부모 객체의 상속값



super()
부모 객체의 생성자 호출.
주로 부모 클래스 생성자가 파람있는 경우 이 값을 넣어주기 위해
사용.


super : 부모 객체 참조값을 갖는 참조변수.














🌙 다형성 🌙

다형성 : 다양한 모양
→ 하나의 코드가 실행할 때마다 변신하여 다양한 형태로 실행되는 것. (변신 로봇처럼)
오버로딩, 오버라이딩, 업캐스팅, 다운캐스팅 등을 구현하여 다형성을 만들 수 있다.


업캐스팅

타입이 부모로 올라간 것.
상속관계에서만 가능
오버라이딩한 메서드 호출시 자식 메서드가 실행됨
타입이 부모이기 때문에 부모 클래스에 정의된 멤버만 사용 가능



다운캐스팅

타입을 그냥 끄집어 내리는게 아니라 업캐스팅 된 것을 원래대로 다시 내리려고 하는 것을 다운캐스팅이라고 한다.
캐스팅 연산자 작성해야 함.

Parent4 p = new Child4();
Child4 c = (Child4) p;





그 외

🎈 유스케이스에서 사용자는 액터라고 한다.

🎈 한 파일에는 하나의 클래스만 쓰기




0개의 댓글