●
목차
●책
ㅡㅡㅡ
*
*파일명 :
추상클래스, 인터페이스
상속 - 공통적인것을 뽑아 같은 곳에서 두자.
(부모꺼는 내꺼, 부모는 자식꺼를 가지고 있지 않기에, 힙에 못올린다.)
(자식을 재료로 부모타입으로 객체생성시 부모꺼 먼저 생성하고, 자기꺼도 생성한다. 그러나 타입이 부모 타입이기 때문에, 자기자신(자식)꺼는 숨겨둔다.)
(부모 > 자식) = x
(자식 > 부모 > 자식) = o
인터페이스 : 추상클래스를 심화시켜 놓았다는 개념
(심화시켰다라는 의미는
◐인터페이스(interface)
-추상 클래스의 특수한 형태
- 인터페이스
- 모든 필드가 public static final(상수)로 정의,
public satic final 생략시 컴파일러 자동으로 추가
(코끼리를 만든다 가정할떄, 코끼리의 코가 길다 라고 정의하면,
(그것으로 그림을 그릴수있고, 그것으로 장난감을 만들수있다.)
‘추상’이란 ‘공통점’을 생각한다. : 일단 정의를 해놓고, 그것을 사용하는 개발자들이 각자 업무에 맞게 개발하는것이다.
- 모든 메소드 public abstract(추상메소드)로 정의
생략시 컴파일러 자동으로 추가
- 정적 메소드(static method) : 클래스 내부의 정적 메소드와 사용방법과 동일
객체 생성 없이 클래스 이름으로 바로 접근 가능
클래스명.메소드명()
- 객체 생성이 불가 - 미완성(추상)메소드를 가지고 있어서
ex)USB 단자 = 인터페이스 : 여기는 인터페이스 꼿는거
키보드 : 제시된 규격만 맞으면,그 어떤것이라도 꼿을수있는게 인터페이스 특징
마우스 : 제시된 규격만 맞으면,그 어떤것이라도 꼿을수있는게 인터페이스 특징
ex)인터페이스(역할)
나는 어떤것을 하도록, 규격을 만들어 줄게, 역할지정해주는 인터페이스
그래서, 각각 자신에게 맞게 짜도록하게 한다.
- 디폴트 메소드는 public로 정의
필요에 의해 추후 메소드를 추가하는 경우 추상 메소드를 추가하면 그동안
구현했던 모든 클래스에 오류 발생
오류를 없애는 방법은 완성 메소드인 default 리턴타입 메소드명()
{}을 만들어 사용
오버라이딩 사용이 가능
다만 완성된 메소드이기 때문에 구현 클래스에서 반드시, 오버라이딩 할 필요 없다.
부모인터페이스이름.super.디폴트메소드 이름
public interface Car{
public static final int A = 3; //상수
public abstract void drive() // 추상메소드
public default void run(){....} // 자바 1.8부터 추가
public static void speed(){}// 자바 1.8부터 추가 클래스명.메소드명()
}
추상클래스 : 거기안에 추상메소드, 생성자, 일반메소드, 가질수있지만,
(즉, 일반클래스 + 추상메소드 1개이상)
인터페이스 : 모두가 추상메소드이다.할정도로 인터페이스의 주 기능 ★★★
구현하고 역할만 알려준다면, 자식들이 구현한다.
2. 인터페이스의 상속
클래스는 다중상속 안된다. 내가 어떤 부모한테 물려받을지 모르기 때문이다.
- 상속시 implements 사용(클래스의 상속은 extends 사용)
- 다중 상속 가능(클래스는 다중상속이 불가능 - 모호성이 발생하기 때문)
★질문> 다중상속 몆개까지 됩니까? 무한으로된다.
(다중상속가능한 이유 : 메소드가 미완성이기 때문이다.그래서 자식이 쓰기에 문제가 없다. 필드는 public static final로 강제되기 때문에 사용할때
클래스명. 필드명 형식을 사용하므로 문제 되지 않음)
*자식 클래스가 부모 클래스 상속
*자식 클래스가 부모 인터페이스 상속
*자식 인터페이스의 상속
자식 클래스 exteds 부모클래스 {}
자식 인터페이스 extends 부모 인터페이스 {}
자식 클래스 implements 부모 인터페이스{}
자식 클래스 implements 부모 인터페이스, 부모 인터페이스 , …{}
자식 인터페이스 implements 부모 클래스 {} ★★★이렇게는 쓸수 없다★
(부모가)인터페이스 상속
(부모가)클래스의 상속
자식이, 완성시키다 = 구현 (implements)
일반 클래스의 상속을 받아 완성한 객체 = 실체 클래스
인터페이스의 상속을 받아 완성한 객체 = 구현객체
일반클래스는 그림을 그릴때, 선으로 사용
인터페이스 반드시 완성. 그림을 그릴때, 점선으로 사용
extends라는 뜻은 (부모꺼는 내것)온전히 가져가다
가. 자식(클래스.인터페이스)와 부모(클래스,인터페이스) 상속 - 상속 5가지(4개)
implement = 완성을 시키겟다
interface(미완성) - 완성된거 못들어간다. 하나도 안되있음
interface는 자체가 미완이기때문에, 완성을 시킬수가 없어서, implements를 그래서 못한다.
부모가하는 것은 역할을 알려주는 것, 자식이 그 역할가지고 사용 구현한다.
*자식 클래스가 부모 클래스 상속
*자식 클래스가 부모 인터페이스 상속
*자식 인터페이스의 상속
자식 클래스 exteds 부모클래스 {}
자식 인터페이스 extends 부모 인터페이스 {}
자식 클래스 implements 부모 인터페이스{}
자식 클래스 implements 부모 인터페이스, 부모 인터페이스 , …{}
자식 인터페이스 implements 부모 클래스 {} ★★★이렇게는 쓸수 없다★
나. 자식(클래스.인터페이스)와 부모(클래스,인터페이스) 상속 - 다중상속
1)클래스는 다중상속이 불가능
2)인터페이스는 다중상속이 가능하다
다. 자식(클래스.인터페이스)와 부모(클래스,인터페이스)상속
-extends와 implement 동시가능
라. 자식(클래스.인터페이스)와 부모(클래스,인터페이스)상속 - 사용법
부모(클래스,인터페이스 동시 상속과 구현) == public class Human(일반클래스) extends student implement Actor(인터페이스)
부모(인터페이스 인터페이스 동시 구현)public class Human(일반클래스) implement Actor(인터페이스),Programmer(인터페이스)
역할을 정할떄, 인터페이스
담당하는 일은 구현하는 것은 미완성된 역할을 배역을 정해주는 것 실제 구현하는 것은 구현클래스가 된다.
알맞게,
인터페이스, 추상클래스, 일반클래스를 쓸것인가? 프로젝트 하면서 고민해야한다.
인터페이스 - 다중상속가능(실무로 그래서 많이쓴다.)
추상클래스 - 상속 하나밖에 못함(어댑터클래스는 추상클래스로 쓴다)
인터페이스는
역할과 구현을 구분하는 것이 중요하다
ex) 도깨비 - 공유(배우가 누가되든 상관없다)
은탁 - 고은(배우가 누가되든 상관없다)
저승사자 - 김동욱(배우가 누가되든 상관없다)
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
public void test(Animal ani){
}
Animal = 부모객체로 지정하면, 부모와 자식여러개를 넘겨줄수있다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
implements(상속- 완성하는)
extends(상속 - 부모의것을 받는)
부모의 것을 내것으로 가져온다.
이것으로 만든게 구현객체이다
3. 인터페이스의 모든 메소드를 구현할 때는 public만 가능
ㅡㅡㅡ
문) 전자제품에 포함되어야 하는 제어부를 만들기
전자제품 : TV, notebook, computer
<요구사항>
- interface : Controllable
- 전자제품의 공통된 규격
1)모든 전자제품에는 전원을 on/off 하는 기능이 있다.
2)모든 전자제품에는 수리(repair - default) 및 공장 초기화(reset - static)을 할 수 있다.
3)전자제품 객체는 turnOn(), turnOff()메소드만 전원을 조절 할 수 있어야 한다.
4)수리 및 공장 초기화 기능을 미리 구현해 놓아서 필요할 때 사용할 수 있어야 한다.
5)수리 기능은 자식 클래스에서 오버라이딩 할 수 있어야 한다.
6)Computer와 Notebook은 외부 리모콘을 허용하지 않는다.
7)Tv는 외부에서 리모콘을 조정할 수 있게 한다.
- 실행 클래스 : ControllableExam
- static은 오버라이딩 개념없다.
오버라이딩(겹처써야 한다)
영역이 같은 인스턴스
<출력 화면>
tv를 켠다.
tv를 끈다.
제품을 수리한다.
제품을 공장 초기화 한다.
'1. JAVA > 3). 자바_개념' 카테고리의 다른 글
자바_개념_Day_22 (1) | 2024.01.30 |
---|---|
자바_개념_Day_21 (1) | 2024.01.29 |
자바_개념_Day_19 (2) | 2024.01.25 |
자바_개념_Day_18 (1) | 2024.01.24 |
자바_개념_Day_17 (1) | 2024.01.23 |