본문 바로가기

java/자바

Ch12 인터페이스

인터페이스를 콘센트라고 생각해라

그러면 input output  상관없다

 

인터페이스는 객체 생성 못함
인터페이스는 두 개가 적용되어야 한다
public static final -> 필드
public abstract -> 함수

public 모든 내용물에 공유 +

static  객체 생성 해도 사용할 있다 +

final  값을 변경할 없다

 

생략이 가능하다.

public static final 진짜로 넣어도 붙을까?
ㅇㅇ 자동으로 넣어준다.

 

증거?

값을 변경이 안됨 final 특징떄문에

a, b변수 둘다 변경 안되잖아.

 

 

 

 

오버라이딩

완성 --> 완성    재정의 : 오버라이딩

미완성 --> 완성  재정의 : 오버라이딩 + 구현하기 (implements)

 

implements ==> 구현을 해야한다

 

다중 상속

인터페이스는 다중 상속이 가능하다
클래스는 다중상속이 불가능하다.

클래스:

C A, B 상속받는다.. 그러면 같은 변수이면 어떤걸 C 받아야하는지 애매해진다.

 

인터페이스:

 하지만 인터페이스는 모호성이 생기지 않는다.

100 implements 해도 C가 직접 정의해야 한다. => 그래서 다중 상속이 가능하다.

 

 

인터페이스 대신에 추상을 써도 된다

모든게 미정의로 되어있으면 => interface
 
클래스에 추가적으로 필드, 메서드를 정의하고 싶을때
인터페이스 조건에 안맞을 수 있다
그런경우 인터페이스를 바꾸지 말고 추상메서드를 써라

 

 

 

 

인터페이스가 클래스를 상속 받을 수 없는 이유

인터페이스는 미완성

클래스는 완성된 상태니까

 

 

 

 

인터페이스는 미완성이라

상속받는 B 내부에 '미완성 함수'--> '완성 함수' 바꿔야한다

 

 

 

 

그냥 재정의하면 오류난다
인터페이스는 안 적으면 -> 퍼블릭인데
클래스는 안 적으면 -> 디폴트다
그래서 오류난다

 

퍼블릭을 추가하자

 

 

인터페이스를 객체로 만드는

  1. 상속받는 클래스 생성! -> 클래스 내에 함수 재정의
  2. 이너클래스로 함수 재정의 -> 클래스 생성없이 객체 생성

 

1) 직접 클래스 만듦

여러개 객체를 만들어도 동일한 방식으로 서로 다른 객체를 생성함

객체를 여러개 만들때 유리

 

 

 2) 익명이너 클래스 사용

 클래스를 만들때마다 구현내용을 계속해서 적어줘야한다.

대신에 클래스 생성 안해도 됨

객체 하나만 만들 유리

 

 

 

 

 

클래스만 사용하면

그래픽카드 드라이버를 바꾸면

인터페이스를 새로 만들어야함

 

어플리케이션을 수정해야함

 

인터페이스가 있으면

어플리케이션은 한번만 작성하면 되고

객체 생성때만 Graphic_Impl() 호출하면 된다

 

 

인터페이스를 만들면

메서드 이름이 오류난다

 

 

인터페이스를 쓰면

함수 이름을 오버라이딩 하기 때문에

이름을 잘못쳐서 틀릴 일이 없어진다

 

디폴트 메서드 : 완성된 메서드를 인터페이스에 넣겠다.

 

인터페이스는 미완성만 있음

왼쪽에 과거 클래스들은 오류가 것이다.

왜냐면 인터페이스에 추가한 bcd() 구현받은 클래스에서

bcd () 없다는 오류가 발생한다

 

 

인터페이스에 미리 기본적으로 함수를 선언

 

구현클래스는 오버라이딩도 가능하다

 

 

 

클래스에서 -> 부모인 인터페이스 안에 있는 디폴트 메서드구현 클래스가 접근하려면

인터페이스명.super.메서드();

이렇게 접근해야한다

 

super.메서드();

Object 객체에 접근하게 된다.

 

 

 

정적메서드는  객체 사용없이 사용 가능

 

인터페이스 안에 있는

1. 필드 < -- public static final

2. 메서드

    2-1) public abstract

    2-2) public default

    2-3) public static

=> 2-1), 2-2), 2-3) 인터페이스에 들어갈 있는 완성된 메서드다.

 

 

'java > 자바' 카테고리의 다른 글

ch13 익명 이너 클래스  (0) 2022.10.03
Ch13 이너 클래스, 이너 인터페이스  (0) 2022.10.03
[Chap12] - 01 추상클래스  (0) 2022.09.25
[Chap11] - 자바 제어자 #2 (final, abstract)  (0) 2022.09.25
chap[10-5] super와 super()  (0) 2022.09.25