[Java]기본16~25강 까지의 내용 정리

bacccine·2022년 4월 18일
0

Java

목록 보기
4/7

상속부터 인터페이스의 다형성까지

상속

  • 클래스의 변수나 메소드를 물려받는 것
  • 자식 클래스가 상속받을 부모 클래스를 선택
  • class 자식클래스 extends 부모클래스 {} 의 형태로 사용
  • "extends" 키워드는 물려받은 것 외 추가 확장을 한다~라는 의미로 이해할 것
  • 부모 객체를 자식 클래스 타입으로 변환하려면 반드시 강제 형변환을 해야 한다.

상속의 특징

  • 부모의 필드와 메서드를 사용 가능
  • 단일 상속만 가능
  • 자식 클래스를 객체로 생성할 때, 부모 클래스가 먼저 객체화된다
  • 모든 클래스는 Object 클래스로부터 시작하는 상속 관계의 하위 객체이다
  • 개발 시간이 감소하고 에러 확률이 낮아진다는 이점이 있다

메소드 오버라이딩(덮어쓰기)

상속 관계에서 부모 클래스의 메소드를 자식 클래스가 변경해서 정의하는 것

메소드 오버라이딩 조건

  • 부모 클래스의 메소드와 자식 클래스의 선언부가 동일
  • 자식 클래스의 재정의된 메소드의 접근 제한자가 부모 클래스보다 사용범위가 같거나 커야 함

오버라이딩과 오버로딩 차이점

구분오버라이딩오버로딩
관계상속같은 클래스
메서드명동일동일
매개변수동일다름
리턴타입동일상관없음
접근제한같거나 같음상관없음

다형성

여러 자료형을 가질 수 있는 특성, 상하위 관계에서 가능

  • 상속 관계에서는 상위 클래스로 형변환되었어도, 오버라이딩한 메소드는 하위 클래스의 메소드가 실행된다

추상클래스

  • 추상 메소드가 하나 이상 있는 클래스
  • new 키워드로 생성이 불가능하여 부모 클래스로만 생성이 가능
  • 상위 클래스의 추상 메소드를 하위 클래스에서 반드시 구현해야 한다
abstract class 클래스명{
}

추상메소드

선언부만 있는 메소드

접근제한자 abstract 리턴타입 메소드명(매개변수);

추상 클래스를 사용하는 이유

(1) 클래스 설계 시 변수와 메서드의 이름 통일
(2) 중복 코드 제거 ∵ 상속 관계를 적용하기 때문
(3) 다형성 개념 적용 - 코드의 변경이 있어도 부품 교체하듯이 쉽게 수정이 가능

@Override를 표시해주는 이유

에러가 나진 않지만, 표시해주면 컴파일러가 재정의한 메서드로 인식을 하기 때문에 잘못
작성한 경우 미리 에러를 띄워 개발자의 실수를 사전에 방지해 줌

Final 클래스

  • 상속이 불가능한 클래스 ex. String, Math
  • 컴파일 에러가 발생한다

Final 메소드

  • 재정의가 불가능한 메서드
  • 특정 메소드를 변경할 수 없게 하기 위해 사용
  • 부모 클래스가 final이면 자식 클래스에서 재정의할 수 없다

Final 변수

  • 값이 변경되지 않는 변수
  • 보통 클래스 내에서 필드로 선언해놓고, 생성자를 통해 초기값을 대입하는 형태로 사용한다

상수

static final 키워드 사용, 클래스의 필드로 선언

인터페이스

호출코드에서 직접적으로 실행코드를 실행하는게 아니라 인터페이스를 통해 실행코드가 실행

		실행		   실행
		→		    →
호출코드 ← 인터페이스 ← 실행코드
		결과		  결과

인터페이스 선언

  • 주로 상수와 추상메소드로 이루어져 있다.
  • 모든 멤버는 public 접근 제한자
interface 인터페이스명 {
	static final 자료형 상수명 = 값;
	abstract 리턴타입 추상메소드명();
}
  • static final, abstract를 생략해도 컴파일러가 자동으로 추가해준다
  • 인터페이스 내의 모든 변수는 상수, 모든 메소드는 추상메소드가 된다
  • Java8 이후 메소드에 default 메소드와 static 메소드를 적용할 수 있게 되었다

인터페이스 특징

(1) 상위,하위 클래스 개념 존재
(2) 클래스 간에는 상속, 인터페이스와 클래스는 구현
(3) 객체 생성 불가
(4) 구현된 클래스로 객체 생성
(5) 다중 구현 가능
(6) 인터페이스 간의 상속 가능 - 다중 상속 가능

인터페이스 다형성

  • 구현 클래스는 인터페이스로 자동 형변환 가능
  • 인터페이스를 구현한 여러 클래스들을 객체로 생성해 같은 메소드를 실행

0개의 댓글