일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Servlet 멀티 스레딩
- Dispathcher Servlet이란
- Spring Handler
- 계산기
- 인텔리제이
- ContextLoaderListener란
- H2 DB
- Spring Container란
- 동의어 파일
- layout
- ElasticSearch 토큰필터
- H2
- ElasticSearch EdgeNGram
- ElasticSearch 동의어 사전
- Servlet과 Thread
- ElasticSearch NGram
- 안드로이드스튜디오
- Bean Factory란
- Spring Servlet이란
- spring 장점
- elasticSearch
- ElasticSearch 동의어 파일
- 자바
- Servlet Life Cycle
- ElasticSearch Shingle
- 안드로이드
- Java
- Servlet Container란
- 토큰필터
- ApplicationContext란
- Today
- Total
결국 무엇이든 해내는 사람
(Java)Day10 - 인터페이스와 추상화,다형성 본문
package first;
public interface InterBoard {
//인터페이스에 선언을 해놓고, 가져다가 반드시 선언된 그대로 모두 구현하면 되는게 인터페이스
//메소드가 있지만 가져다 쓰거나 오버라이드 하거나, abstract가 붙은 메소드는 반드시 구현하면 되는게 abstract class
abstract void upload();
abstract void delete();
abstract void rePage();
abstract void exPage();
}
주석이 곧 내용 ..
인터페이스를 통해 추상화 메소드 들을 선언만 해놓음. 인터페이스에는 구현해놓지 않는다.
즉 인터페이스를 implements하여 구체적으로 구현하라는 뜻
package first;
public class BaseBoard implements InterBoard{
@Override
public void upload() {
System.out.println("업로드 완료");
}
@Override
public void delete() {
System.out.println("게시물 삭제완료");
}
@Override
public void rePage() {
System.out.println("새로고침");
}
@Override
public void exPage() {
System.out.println("이전페이지");
}
}
인터페이스 InterBoard implements하여 오버라이드 합니다.
구체적으로 구현을 완료하고(빠짐없이)
이 BaseBoard라는 클래스는 밑에있는 FreeBoard가 상속받습니다.
package first;
public class FreeBoard extends BaseBoard{
void FreeBoard_print() {
rePage(); //InterBoard인터페이스의 메소드를 구현한 BaseBoard 클래스에서 상속받은 메소드 rePage
}
}
그러면 FreeBoard의 FreeBoard_print()메소드 호출시 상속받은 BaseBoard의 rePage()메소드를 호출합니다.
-----------------------------------------------------------------------------------------------------------------------------------
좀더 심화로 파봄
package second;
public interface InterBoard {
//인터페이스에 선언을 해놓고, 가져다가 반드시 선언된 그대로 모두 구현하면 되는게 인터페이스
//메소드가 있지만 가져다 쓰거나 오버라이드 하거나, abstract가 붙은 메소드는 반드시 구현하면 되는게 abstract class
abstract void upload();
abstract void delete();
abstract void rePage();
abstract void exPage();
abstract void herePrint();
}
주석이 곧 내용,,,
InterBoard 인터페이스에 herePrint()라는 메소드 선언 추가
package second;
public class BaseBoard implements InterBoard{
@Override
public void upload() {
System.out.println("업로드 완료");
}
@Override
public void delete() {
System.out.println("게시물 삭제완료");
}
@Override
public void rePage() {
System.out.println("새로고침");
}
@Override
public void exPage() {
System.out.println("이전페이지");
}
@Override
public void herePrint() {
System.out.println("BaseBoard 여기는 BaseBoard");
}
}
위 코드는 BaseBoard클래스의 코드 . 인터페이스를 받아서 기능을 구현함
그리고 MemberBoard와 FreeBoard 코드 는 밑에 적어둠
package second;
public class MemberBoard extends BaseBoard {
@Override
public void upload() {
System.out.println("업로드 완료22222222");
}
}
package second;
public class FreeBoard extends BaseBoard{
public void nicePrint() {
rePage(); //InterBoard인터페이스의 메소드를 구현한 BaseBoard 클래스에서 상속받은 메소드 rePage
}
public void herePrint() {
System.out.println("hihi 이거는 FreeBoard");
}
}
그리고 Main... 메인에 주석 겁내 달아놨음..
package second;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
//InterBoard는 인터페이스고, BaseBoard는 InterBoard로부터 implements 됨 . 그리고 이런
//BaseBoard는 Memberboard와 FreeBoard에 상속을 해줌
BaseBoard in1 = new MemberBoard(); //가능 , 겉모양은 InterBoard지만 실제로는 BaseBoard이다 . 서로 상속해주고 상속받는 사이
InterBoard in2 = new FreeBoard(); //가능 겉모양은 InterBoard지만 실제로는 FreeBoard이다 . 부모에게 상속받는 클래스와 그 부모의 인터페이스 관계
// in1.nicePrint();
in1.upload(); //BaseBoard라인을 기준으로 하되 (BaseBoard에 있는거 사용가능), MemberBoard에 오버로딩된걸 쓴다
in2.herePrint(); //InterBoard라인을 기준으로해야함(InterBoard에 herePrint가 추상으로 존재해야함, 그래야 인터페이스로 받는 BaseBoard에서 구현을 하고 그 기능을 상속받는겨.)
//즉 FreeBoard에만 herePrint메소드가 존재한다고 사용할수가없음
//위의 herePrint는 FreeBoard에서 상속받은 BaseBoard의 hereBoard메소드를 출력함
///////////////////////////////////////////////////////////////////////////
//만약 FreeBoard에 주석으로 된 herePrint()의 주석을 해제하면
//FreeBoard의 오버라이드된 herePrint가 수행된다. 이조건은 상속받은 BaseBoard에 구현이 되어있어야함
// FreeBoard in3= new FreeBoard();
// in3.herePrint();
}
}
오버라이드와 오버라이드의 연속.
Main에 보이는 객체생성의 특징이 다형성을 의미함
매우 복잡한 시도를 해보았는데 결국 인터페이스를 받았을 때 적절히 오버라이드를 하는것이 중요함
또한 다형성에서는 하나의 타입(부모)으로 다양한 결과를 얻어내기 위함이다.
즉 위코드를 살짝 수정해서 (위에꺼필요한것만 봐도댐 수정한건 아래부분이 전부라서 노상관)
package second;
public class FreeBoard extends BaseBoard{
public void nicePrint() {
rePage(); //InterBoard인터페이스의 메소드를 구현한 BaseBoard 클래스에서 상속받은 메소드 rePage
}
public void herePrint() {
System.out.println("hihi 이거는 FreeBoard");
}
}
package second;
public class MemberBoard extends BaseBoard {
@Override
public void upload() {
System.out.println("업로드 완료22222222");
}
public void herePrint() {
System.out.println("hihi 이거는 MemberBoard");
}
}
FreeBoard클래스와 MemberBoard클래스를 요로콤 herePrint()메소드를 수정해준다. 본인이 어디 클래스인지 알려고 sysout을 저런식으로 작성해줌
그리고 herePrint()메소드를 호출하면
package second;
public class Main {
public static void main(String[] args) {
BaseBoard in1 = new MemberBoard();
BaseBoard in2 = new FreeBoard();
in1.herePrint();
in2.herePrint();
}
}
오버라이드된 값들이 출력댐
'두서없는 공부 노트 > JAVA' 카테고리의 다른 글
(Java)Day11 - 클래스 복습 ------------(코로나로 교육 중단..)------------ (0) | 2020.08.20 |
---|---|
(Java)Day10 - 메소드 복습 (0) | 2020.08.19 |
(Java)Day09 - Abstract 추상화 (0) | 2020.08.18 |
(Java)Day09 - Final (0) | 2020.08.18 |
(Java)Day09 - 상속을 확실히 이해해보기2(오버라이딩, super) (0) | 2020.08.18 |