0704 java oop-2

onnbi·2022년 7월 26일
0

java-tutorial

목록 보기
7/13
post-thumbnail

객체지향프로그래밍-2

상속

B class extends A class

B 클래스는 A클래스의 상속을 받았다

상속받은 클래스의 변수와 메서드를 사용할 수 있다

단, 접근제어지시자 private는 직접 접근할 수 없다

오버라이딩

부모클래스에서 받은 메서드를 자식클래스에서 재작성하는 것

성립조건

  1. 메소드의 이름이 동일해야 한다
  2. 매개변수의 개수와 타입이 동일해야 한다
  3. 리턴타입이 동일해야 한다
  4. private메서드는 오버라이딩이 불가능하다
  5. 접근 제어 지시자는 부모의 것보다 같거나 넓은 범위로 가능하다

다형성

polymorphism

상속을 이용
부모 클래스 타입의 변수로 자식 객체를 다룰 수 있는 기술

LgTV lg = new LgTV();

TV tv = new LgTV();

  1. 부모 타입 변수로 자식 객체를 다루는 것
  2. 반대로, 자식 타입 변수로 부모 객체를 다룰 수 없음
  3. 형제 끼리는 다룰 수 없음

upcasting / downcasting

public class Dog extends Animal {
	public void hunting() {
		System.out.println("사냥");
	}
}

Animal을 상속받은 dog와 rabbit클래스가 있을 때

	Dog dog1 = new Dog();
	dog1.breath(); 	//Animal의 메서드
	dog1.hunting();	//Dog의 메서드
		
	Animal dog2 = new Dog();
	// 부모 타입이 가진 것만 사용할 수 있다
		
	dog2.breath(); 			//upcasting
	((Dog)dog2).hunting();	//downcasting

다형성이 적용된 상황에서 overriding을 해도 그대로 적용된다
형제끼리는 불가능 하기 때문에 주의

추상클래스

몸체 {실행부} 없는 메서드를 가진 미완성 클래스

  • 미완성 클래스로 객체 생성이 불가하다
  • 객체로서의 역할은 못하지만 부모 타입은 가능하다 (다형성 가능)
  • 일반적으로 abstract 메서드를 포함한 클래스를 말하지만, abstract 메서드가 없어도 클래스에 abstract 선언이 가능하다
  • 추상클래스를 상속한 경우 반드시 추상 메서드를 구현해야 한다 (오버라이딩 강제화)
TestClass1 tc = new TestClass1();
TestClass th2 = new TestClass1();
// 다운캐스팅 없이도 자식클래스 사용할 수 있음

추상클래스는 상속받아 추상 메서드를 완성한 자식 클래스를 사용하기 위해 만든다

인터페이스

상수와 abstract메서드만으로 이루어진 추상클래스 변형체 (클래스X)

접근제어지시자 인터페이스 인터페이스명

  • 모든 메서드가 추상이기 때문에 abstract 붙이지 않음
  • 모든 변수는 public static final
  • 클래스에 상속을 강제하기 위함 > 인터페이스명+Impl
  • 상속 시 인터페이스에 정의된 모든 메서드를 구현해야 함

인터페이스의 장점

  1. 상위 타입의 역할로 다형성을 지원하여 연결해주는 역할
  2. 해당 객채가 다양한 기능을 제공시에도 인터페이스에만 해당하는 기능만을 사용하도록 제한할 수 있다
  3. 공통 기능상의 일관성 제공
  4. 공동 작업을 위한 가이드라인 제공

추상클래스 vs 인터페이스

인터페이스추상클래스
상속다중상속단일상속
상속방법implmentsextends
최소 메서드 수모든메서드추상메서드 0개 이상
abstract묵시적명시적
객체생성객체 생성불가 / 타입으로 사용객체 생성불가 / 타입으로 사용
profile
aelatte coding journal

0개의 댓글