상속

zee-chive·2024년 7월 19일

Java

목록 보기
5/12

UML 다이어그램

// 하나의 파일에 여러 개의 class를 만들 수 있다. 
// public은 1개만 가능, 파일 이름과 일치해야 한다.
public class A {
	B b; // 멤버 변수로 갖고 있다. -> A 는 B와 연관된다. 
	C c; // 양방향 연관 : A와 C는 서로 연관된다. 
	D[] d; // 집합  : A는 D의 집합을 갖고 있다. A는 D 없이도 존재 가능 (StudentManager, Student)
	E[] e; // 구성 : A는 E로 구성된다. A는 E가 없으면 존재가 불가능하다. +
	
	// 의존 : A class 가 갖고 있는 건 아니지만, 사용한다. 
	// A는 F에 의존한다. 
	void method() {
		F f = new F();
		f.Method();
	}
}


class B {
	
}

class C {
	A a;
}

class D {
	
}

class E {
	
}

class F {
	void Method() {
		System.out.println("F");
	}
}





상속

  • 상위 클래스의 속성과 메서드를 물려 받아 확장하여, 새로운 자식 클래스를 정의하는 것

  • public class Student extends Person
    → 기존의 설계도를 확장하여 Student 라는 설계도를 생성한다는 것이다.

  1. 확장성, 재사용성이 가능 - 부모의 생성자와 초기화 블록은 상속받지 않는다.
  2. 다중 상속을 허용하지 않고, 단일 상속만 지원한다.
    • 여러 개를 받고 싶은 경우, 상속의 상속을 진행해야 한다.
  3. 관계
    • 부모(상위, super) 클래스
    • 자식(하위, sub) 클래스
  4. 자식 클래스는 부모 클래스의 멤버 변수, 메소드를 자신의 것처럼 사용할 수 있다.
    • 단, 접근 제한자에 따라 사용 여부가 달라진다.
  5. Object 클래스는 모든 클래스의 조상이다. 별도의 선언이 없다면 extends Object 가 생략
  6. 부모 클래스에서 매개변수가 있는 생성자를 만들면, 자식 클래스에서도 만들어줘야 한다.
    • 생성자는 내부에 기본적으로 super(); 가 생략되어 있기 때문에.
    • 기본적으로 부모 클래스의 기본 생성자를 호출한다는 뜻.
    • 프로그래머가 명시적으로 super를 호출할 수 있다.



  • super 키워드 : 조상 클래스의 생성자 호출
  • 생성자 내부에서 super를 쓰지 않았다면 super가 생략된 것이다.
  • super. > 부모 내부의 생성자와 객체를 갖고 올 수 있다.

  • super()는 메소드 상단에 있어야 하지만, super. 로 호출하는 것은 어느 줄에 들어가도 된다.





오버라이딩 (Overriding)

  • 메서드는 알고리즘, 행위, 동작을 의미하는 것이다.
  • 부모에 있는 메서드를 재정의하여, 자식 메서드에서 별도로 정의하는 것
  • 바로 위의 부모 클래스만 가능한 것이 아니라, 상위의 모든 클래스 가능
  • 메서드의 이름, 반환형, 매개변수(타입, 개수, 순서)는 모두 동일해야 한다.

  • 하위 클래스의 접근 제어자 범위가 상위 클래스보다 크거나 같아야 한다.
    • 부모 클래스의 내용을 자식이 감출 수 없다.

  • @Override 어노테이션 사용으로 좀 더 명확하게 나타낼 수 있다.
  • 메서드 오버로딩과 별개로 반드시 상속 관계에 있을 때 사용할 수 있다.
//Person class - 부모 
void eat() {
	System.out.println("음식을 먹습니다.");
}
// Student class - 자식 
@Override 
void eat() {
	System.out.println("점심을 먹습니다.");
}

  • 오버라이딩 한 후에 오버로드 하는 경우, 매개변수를 다르게 넣게 되면, 오버라이딩이 안 된다.
@Override
void eat(int a) {
	System.out.println( a + "번 먹습니다.");
}

오류 발생 :
The method eat(int) of type Student must override or implement a supertype method






Object

  • toString 메서드

    기본 return 값 : getClass().getName() + "@" + Integer.toHexString(hashCode());

  • equals 메서드

    기본 return 값 : this == obj;

  • String 에서 사용할 때

    • equals : 문자열 값 비교 (string 의 메서드에서 오버라이딩 한 것)
    • == : 주소 비교

  • final : 해당 선언이 최종 상태이며, 결코 수정이 될 수 없다.
  • final class : 상속 금지
  • final method : 오버라이딩 금지
  • final 변수 : 더이상 값을 바꿀 수 없음, 상수화
profile
누가 봐도 읽기 쉬운 글이 최고의 글이다.

0개의 댓글