상속 INHERITANCE_Part2

2022. 3. 3. 16:53·Programing/JAVA
목차
  1. final
  2. 다형성 polymorphism
  3. 다형성 활용

final

  • final 변수 : 변수값 변경불가 - 상수
  • final 메서드 : 오버라이딩 불가
  • final 클래스 : 상속 불가

final 메서드 : 오버라이딩 불가

class MethodSuper{
    final void superMethod(){
        System.out.println("super method");
    }
}
class MethodChild extends MethodSuper{
    void superMethod(){
        System.out.println("child method");
    }
}
public class FinalMethod{
    public static void main(String[] args) {
        // TODO Auto-generated method stub
    }
}

final 클래스 : 상속 불가

public final class FinalClass {
    int x;
}
class ChildClass extends FinalClass{
}

다형성 polymorphism

  • 하나의 참조(레퍼런스) 변수가 여러 타입의 객체 참조
  • 부모 클래스 타입의 참조 변수로 자식 클래스 참조
  • 참조된 자식 클래스는 자동으로 부모 클래스 타입으로 변환(UpCasting)
  • 다시 자식 클래스가 부모 클래스 참조 시는 명시적으로 캐스팅 해야함(DownCasting)
  • 다형성에서도 참조된 참조변수에서도 재정의된 자식 메서드 호출됨
  • 부모의 참조변수는 메서드의 인자로 전송등에 활용 됨(매개변수의 다형성)
  • 향후 인터페이스에서도 다형성 가능

부모 클래스

package chapter08.poly;

public class Parent {

    String name;

    void walk() {
        System.out.println("부모가 걷는다.");
    }

    void run() {
        System.out.println("부모가 달린다.");
    }

}

자식 클래스

package chapter08.poly;

public class Child extends Parent {

    String name;

    // override
    void run() {
        System.out.println("자식 달리기");
    }

    // new
    void game() {
        System.out.println("자식 게임");
    }
}

다형성 확인 - 자동형변환

package chapter08.poly;

public class PolyEx {

    public static void main(String[] args) {

        Child c = new Child();

        c.run();

        // 부모클래스의 자료형으로 선언 (자동형변환)
        Parent p = new Child();
        p.run(); // 재정이된 메서드가 실행
        // p.game(); // 에러


    }

}

다형성 - 강제형변환

package chapter08.poly;

public class PolyEx2 {

    public static void main(String[] args) {

        Parent p = new Child();

        p.run();

        // 자식클래스의 자료형으로 변환 (강제형변환)
        Child c = (Child)p;
        c.game();

    }

}

다형성 활용

부모 클래스

package chapter08;

public class GraphicCard {
    public void process() {
        System.out.println("그래픽 처리");
    }
}

자식 클래스

package chapter08.poly;

public class Amd extends GraphicCard {

    public void process() {
        System.out.println("AMD 그래픽 처리");
    }

}

자식 클래스

package chapter08.poly;

public class Nvidia extends GraphicCard {

    public void process() {
        System.out.println("Nvidia 그래픽 처리");
    }

}

다형성 - 부품 교체 하듯 사용

package chapter08.poly;

public class Computer {

    public static void main(String[] args) {

        GraphicCard gc = new GraphicCard();
        gc.process(); // 원래 그래픽카드 process

        gc = new Amd();
        gc.process();

        gc = new Nvidia();
        gc.process();

    }

}

다형성 - 부품 교체 하듯 사용

package chapter08.poly;

public class Computer {

    public static void main(String[] args) {

        GraphicCard gc = new GraphicCard();
        gc.process(); // 원래 그래픽카드 process

        gc = new Amd();
        gc.process();

        gc = new Nvidia();
        gc.process();

    }

}

다형성 - 매개변수에서 사용

  • 부모의 참조 변수로 모든 자식 클래스 처리
package chapter08.poly;

public class Game {

    void display(GraphicCard gc) {
        gc.process();
    }
}
package chapter08.poly;

public class Computer2 {

    public static void main(String[] args) {

        Game g = new Game();

        Amd gc2 = new Amd();
        g.display(gc2);

        Nvidia gc3 = new Nvidia();
        g.display(gc3);


        // 다형성으로 처리
        GraphicCard gc = new GraphicCard();
        g.display(gc);

        gc = new Amd();
        g.display(gc);

        gc = new Nvidia();
        g.display(gc);

    }

}

'Programing > JAVA' 카테고리의 다른 글

인터페이스 INTERFACE  (1) 2022.03.04
상속 INHERITANCE_Part3  (0) 2022.03.03
상속 INHERITANCE_Part1  (2) 2022.03.03
클래스 CLASS_Part4  (0) 2022.03.02
클래스 CLASS_Part3  (0) 2022.03.02
  1. final
  2. 다형성 polymorphism
  3. 다형성 활용
'Programing/JAVA' 카테고리의 다른 글
  • 인터페이스 INTERFACE
  • 상속 INHERITANCE_Part3
  • 상속 INHERITANCE_Part1
  • 클래스 CLASS_Part4
쿠크
쿠크
  • 쿠크
    쿠크 개발자
    쿠크
  • 전체
    오늘
    어제
    • 분류 전체보기 (112) N
      • Programing (39)
        • JSP (3)
        • JAVA (24)
        • Spring (7)
        • HTML (5)
      • 이외 (15)
        • Git (5)
        • 임시 잡다함 (6)
        • IntelliJ (1)
        • 에러 모음 (2)
      • OS (25) N
        • Docker (3) N
        • Kubernetes (11) N
        • Linux (8) N
        • DevOps (3) N
      • DataBase (2)
        • Mysql (1)
      • 토이 프로젝트 (0)
        • 게시판 만들기 (0)
      • Spring (0)
      • 건강 & 생활 (16) N
        • 여름 건강 (16) N
      • 공부 · 자격증 (1)
      • 명언과 루틴 (3)
      • 부동산 or 주식 (5)
        • 부동산 (3)
        • 주식 (2)
      • 경제 (6) N
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 링크

    • 깃 허브 주소
  • 공지사항

  • 태그

    error
    java
    연말정산 #공제항목 #월세공제 #기부금공제
    spring-framwork
    ubuntu
    IntelliJ
    spring
    클래스
    수면팁 #불면증 #호흡법 #수면습관
    상속
    MVC
    HTML
    kubernetes
    MySQL
    DevOps
    쿠버네티스
    데브옵스
    Linux
    jsp
    Database
  • hELLO· Designed By정상우.v4.10.3
쿠크
상속 INHERITANCE_Part2

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.