2019. 3. 11. 17:21ㆍJAVA
-------------------------------final클래스 final메소드-------------------
final 클래스는 상속이 불가하다.
public final class A {
부모자격 박탈
상속금지
}
--------------------------
public class B extends A {
(final클래스는 상속이 안돼 에러)
}
final 메소드는 재정의가 불가하다.
public final void m1(){...} ---> public void m1(){...} // 에러
(final 메소드 재정이라 에러)
public void m2(){...} ---> public void m2(){...} // 가능
-----------------------------인터페이스--------------------------------
인터페이스란.
구현객체가 제공할 기능을 규정하는것을 인터페이스라 한다.
객체 추상화랑 비슷함
///인터페이스 메소드 앞에는 public abstract 가 기본적으로 붙어있는것이다.
(객체) (인터페이스) (객체)
운전자 --> 메뉴얼 --> 차
손님 --> 메뉴판 --> 주방
접점을 인터페이스라고 한다. 객체간의 서로 알필요없이 접점인 인터페이스만 알면 된다.
손님 --> 메뉴판 <-- 주방
##추상메소드와 인터페이스의 차이##
추상 클래스 인터페이스
| |
v v
구현부담의 감소 사용방법 같은 구현객체의 생성, 교환성
(구현도 하면서 추상화로 몇몇 메소드만 규약한것) (규약만 하는것, 기본이 abstract다.)
앞으로는 이렇게 작성을 한다.
public class Menu{ ---> public interface Menu{
} }
자바 8미만 기준.
인터페이스는 상수와 추상메소드를 가진다
자바 8
자바 8이상을 인터페이스가 정적메소드, default메소드, 상수, 추상메소드 4가지를 가진다.
interface 특징
- 상수 / 추상메소드
- 객체생성 X
- 다중 상속을 지원(클래스는 단일 상속, 한곳에서만 상속받는것 을 지원한다.)
(인터페이스 끼리는 다중 상속이 가능하다.)
// public class Genesis extends AbstractCar implements Highpassable, HeadupDisplayble{
// public interface Safeable extends Camare, AutoDrivable{ //Camera, AutoDrivable 은 인터페이스
- 구현클래스는 여러개의 인터페이스를 구현할수 있다.
- 인터페이스는 클래스를 상속받을 수 없다. (클래스에는 변수, 생성자, 메소드등 들어있기때문에)
------------예시----------------------(interface)
public interface MemberService {
// 추상메소드
public abstract void removeAllMembers();
// public abstract 는 생략이 가능하다.
public void printAllMembers();
public void removeMemberByNo(int no);
public String getMemberNameByNo(int no);
}
interface 상속일 경우 extends가 아니라 implements를 적는다.
-------------예시-----------------------(class)
public class MemberServiceImpl implements MemberService{
public void removeAllMembers(){
System.out.println("엑셀파일에서 모든 회원정보를 삭제한다.");
}
public void printAllMembers(){
System.out.println("엑셀파일의 모든 회원정보를 출력한다.");
}
public void removeMemberByNo(int no){
System.out.println("엑셀파일에서 "+no+"번 회원을 삭제한다.");
}
public String getMemberNameByNo(int no){
String name = null;
name = "홍길동";
System.out.println("엑셀파일에서 "+no+"번 회원의 이름을 조회한다.");
return name;
}
}
}
------------예시-----------------------(App파일)
public class MemberApp{
public static void main(String[] args){
// MemberServiceImpl 인터페이스를 구현한 객체 생성
MemberServiceImpl service1 = new MemberServiceImpl();
service1.printAllMembers();
// 인터페이스로 구현한 객체는 인터페이스타입의 변수에 담을 수 있다.
MemberService service2 = new MemberServiceImpl();
service2.printAllMembers();
}
}
------------------------------------------------------
##인터페이스는 다른 인터페이스를 하나이상 상속받을 수 있다.##
////////////////////////////////////////////////////////
-----------------예시----------------------------------
public interface Camera{
void record();
}
-----------------예시2---------------------------------
public interface AutoDrivable{
void autoDrive();
}
-----------------예시3---------------------------------
// 인터페이스는 다른 인터페이스를 하나이상 상속받을 수 있다.
public interface Safeable extends Camare, AutoDrivable{
void airbag();
}
////////////////////////////////////////////////////////////////
-------------------예시 1 --------------------------------------
public interface DataReader {
void read();
}
-------------------예시 2----------------------------------------
public class NetworkDataReader implements DataReader {
public void read(){
System.out.println("네트워크 통신을 통해서 필요한 데이터를 읽는다.");
}
}
-------------------예시 3-----------------------------------------
public class HRMgr {
// DataReader 인터페이스를 구현한 객체가 연결될 잭(그릇)을 선언
private DataReader reader;
public void setReader(DataReader reader){
this.reader = reader;
}
public void load(){
reader.read();
}
}
-------------------예시 4-------------------------------------------
public class HRMgrApp{
public static void main(String[] args){
// HRMgr 객체 생성
HRMgr mgr = new HRMgr();
// DataReader인터페이스를 구현한 NetworkDataReader객체 생성
NetworkDataReader reader1 = new NetworkDataReader();
// HRMgr의 reader잭에 위에서 생성한 NetworkDataReader객체 연결
mgr.setReader(reader1);
mgr.load();
}
}
-----------------결 과------------------------------------------------
---------- 실행 ----------
네트워크 통신을 통해서 필요한 데이터를 읽는다.
출력 완료 (0초 경과) - 정상 종료
'JAVA' 카테고리의 다른 글
return, 익명객체, 익명 객체, 이클립스, Object, 오브젝트 (0) | 2019.03.13 |
---|---|
중첩 클래스, 익명객체 (0) | 2019.03.12 |
super(), super, 추상클래스, 추상메소드, 템플릿 클래스, 템플릿 패턴 (0) | 2019.03.08 |
필드의 다형성, instanceof (0) | 2019.03.08 |
상속, extends, 오버라이딩, 재정의, 타입형변환 (0) | 2019.03.08 |