본문 바로가기
JAVA Basic

공부 15일차) 인터페이스 상속

by 넴넴L 2023. 1. 16.
728x90

안녕하세요~ 넴넴입니다!

새로운 한 주가 시작이 되었네요 이번 주도 파이팅입니다

공부 바로 시작해 보죠

 

 

매개변수의 다형성
1. 매개 변수의 타입이 인터페이스인 경우
- 어떠한 구현 객체도 매개값으로 사용 가능
- 구현 객체에 따라 메서드 실행결과 달라짐
강제 타입 변환
- 인터페이스 타입으로 자동 타입 변환 후, 구현 클래스 타입으로 변환
객체 타입 확인
- 강제 타입 변환 전 구현 클래스 타입 조사
- instanceof 연산자

Vehicle Class
Bus Class
Vehicle Class

여기서 checkFare가 오류가 납니다. 왜냐하면

Vehicle 인터페이스 타입의 변수에 Bus 클래스 객체를 저장했기 때문에
부모인 Vehicle 인터페이스의 멤버만 사용할 수 있기 때문입니다.

사용하려면 vehicle 자신으로 돌아와야 합니다.

 

checkFare을 다시 사용해 줄 수 있게 강제로 형 변환을 시켜봅시다.

강제 형변환이기 때문에 들고 있던 녀석 Bus를 앞에다 괄호 안에 써주셔야 합니다.

과거에 저희들은 instanceof를 사용한 적이 있었는데 기억이 안 나실 겁니다.

괜찮아요 저도 잘 안나거든요. 그래서 다시 적어봤습니다.

instanceof 연산자 : 지정한 데이터가 지목한 데이터 타입의 변수인지 확인하는 연산자

 

클래스를 두 개만 더 만들어줍시다.

Taxi Class
Driver Class

다시 Ex 파일로 돌아와서

VehicleEx Class

실행이 잘 됩니다.

 

정리를 해보자면

Driver 클래스 전용 메서드인 drive 메서드, 매개변수로 인터페이스인 vehicle 사용하고
Vehicle 인터페이스를 상속받아 구현한 객체를 매개변수로 받을 수 있고
Bus, Taxi 클래스를 매개변수로 사용할 수 있습니다.

 

인터페이스 상속
상속 - extends
구현 - implements
1. 하위 인터페이스 구현 클래스는 아래 추상 메서드를 모두 재정의해야 함.
2. 인터페이스 자동 타입 변환
- 해당 타입의 인터페이스에 선언된 메서드만 호출 가능

 

한번 해봅시다. 인터페이스 3개를 만들어서

이렇게 상속을 해줍시다.

 

해준 뒤 클래스 하나를 생성해서 모두 구현을 해줍시다.

이제 실행할 클래스를 만들어야겠죠?

상속받은 모든 메서드를 다 사용이 가능합니다. 구현을 다 해주었기 때문이죠

인터페이스 타입의 변수 ia를 생성, 해당 변수에 자식 객체를 저장도 가능합니다.

InterC는 InterA, InterB에 물려받은 것을 다 가지고 있으니 A, B, C 모두 사용이 가능합니다.

이해 참고용

이런 느낌입니다.

이것이 인터페이스 상속입니다.

정리해 보자면

다중 상속이 가능하고, 상속할 때는 extends를 사용하고

상속받은 자식도 인터페이스라서 구현 클래스가 필수입니다.

 

디폴트 메서드가 있는 인터페이스 상속
1. 부모 인터페이스의 디폴트 메서드를 자식 인터페이스에서 활용 방법
- 디폴트 메서드를 단순히 상속만 받음
- 디폴트 메소드를 재정의해서 실행 내용 변경
- 디폴트 메소드를 추상 메서드로 재선 언

참고용

들어가기 전에 인터페이스랑 클래스를 워낙 많이 만들어야 하니 이해해 주세요 ㅠㅠ

인터페이스 1개 만들어주시고

클래스 2개 + 실행할 클래스 1개 만들어주세요

실행하면

예상하신 대로 나옵니다.

MyInter Class

MyInter Class에 코드를 추가해 주시고, MyClassB Class에도 추가!

MyClassB Class

코드 추가 후 실행!

역시 예상한 대로 나옵니다. 여기까지는 저희가 이때까지 다 해본 것입니다.

 

새로운 예제를 해봅시다.

인터페이스 하나 만들고

위의 인터페이스를 상속받는 녀석을 하나 만들고

하나를 만들어 줍니다.(죄송합니다 ㅎㅎ)

 

마지막으로 실행 부분을 만듭시다.

DefaultMethodEx2 Class 총코드입니다.

지금 보시면 ChildInter1, 2에는 method2가 없는데

실행을 하면 method2가 나옵니다.

저번에 디폴트 했을 때 기억을 떠올려 보면

method2는 디폴트 메서드이기 때문에 구현하지 않아도 된다고 했던 거 기억하시면

오늘 공부는 끝이 났습니다.

 

너무 노가다라서 짜증도 나기도 했지만 그래도 끝을 내고 나니 뿌듯한 하루가 되었네요

포기하지 않고 끝까지 하신 분들 모두 대단하십니다.

 고생하셨습니다!