※ chap7
<-> 구체적
- { } 없이 ; 으로 끝나야 한다.
- x
- x
: 하나 이상의 추상 메서드를 포함한 클래스는 추상 클래스이다(o)
<-> 추상클래스 선언 후 모든 메서드를 구현했다 -> 그래도 추상클래스이다.(abstract class 했으니까)
-인터페이스는 콘센트
class C1 implements A
: C1은 A를 구현하겠다! (상속의 extends와 비슷)
인터페이스에 속한 모든 추상메서드를 구현하지 않으면 인터페이스를 구현한 자식 클래스는 사용할 수 없다.
인터페이스는 클래스와 달리 강제적이다.
인터페이스끼리 extends(상속)할 수 있다.
클래스는 인터페이스를 상속(extends)받을 수 없고, 구현(implements)할 수 있다.
: 상속은 같은 애들끼리만 가능.
인터페이스는 클래스를 상속/구현 할 수 없다.
- o
:몰라도 돼..
인터페이스는 상수, 추상메서드만 가진다.
- o
: .java 를 컴파일러가 읽기 위해 class형태로 바꾼다.
- implements
= 구현
- default, static, private
: 안 쓴다.
- 인터페이스
return num1 + num2
run( )
: bus, autocar 모두 사용하고 있다 > 부모가 구현했거나 or 자식이 오버라이딩 했거나..
: 문제만 보고는 Car에서 run이 기울어야 하는지 아닌지 알 수 없다.
bus
: new로 객체 생성했다 > 추상x > 기울이지x
load( )
: autocar 혼자 사용하고 있는 메소드 + autocar는 일반 클래스(기울이지 않았으니까) -> 구현한 메소드
상속은 is-a 관계
ex) 나는 사람이다, 고양이는 동물이다.
구현은 has-a 관계
ex) 자동차는 엔진을 가지고 있다, 캐릭터는 스킬을 가지고 있다.
클래스 다중상속 안되는 이유??
인터페이스 다중상속 되는 이유??
: 인터페이스는 구현하는 클래스가 메소드를 재정의하면서 같은 이름의 메서드를 합칠 수 있다. -> 충돌 가능성이 없다.(인터페이스에는 애초에 메서드의 {내용}이 없기 때문에)
deQ로 나가고 enQ로 들어온다.(한 방향)
- implements
- 추상클래스(abstract)
- 상수
- 다형성
- default, static
- 예
- 3
: A.this.변수명으로 출력은 가능하나 수정은 x
- 1
- x
: 공유하는 코드만 가능
- o
- 내부 클래스
▲몰라도 돼...
1.3
:인터페이스는 구현부가 없기때문에, 인스턴스 변수, 생성자(new)도 없다. 인터페이스의 모든 멤버는 public으로 공개된다.
- pass
- 2
:추상메서드(메서드 abstract 생략 가능)를 가지면 무조건 추상클래스.
:4번 지금은 가능한 사용 방식이나, 쓰지 않는다.
- 4
: 클래스 다중상속 불가
- x
:8부터. 그렇대..
- x
: 모든 메서드가 abstract인 경우는 인터페이스
- x
: 비어있는 인터페이스 만들 수 있다.
나중에 추가할 수도 있지..
- implements Edible
- 2, 6, 8행
:2행 - 인터페이스는 변수로 상수만 가질 수 있다. 상수는 반드시 초기화해야 한다.
:6행 - implements
:8행 - 인터페이스는 객체 생성 불가능
- pass
※ chap7 - programming
Q-5)
Q-6)
※ chap7 - mission
R
전화온 순서대로 고객의 전화를 가져옵니다.
상담원 순서대로 배분합니다.L
전화온 순서대로 고객의 전화를 가져옵니다.
쉬고 있거나 대기가 가장 적은 상담원에게 할당합니다.P
고객 등급이 높은 고객의 전화를 먼저 가져옵니다.
업무 skill 값이 높은 상담원에게 우선적으로 배분합니다.
공통점 : 추상 메서드 포함
-> 구현 또는 상속으로 재정의(오버라이드: 기존에 있는 것을 바꾸는 것. 기능 구현)
-> 각각의 클래스에서 정의 : 다형성
-> 같은 이름의 메서드 호출 시 다른 결과 발생
필요성 : 코드의 중복 제거
차이점