상속 INHERITANCE_Part2

2022. 3. 3. 16:53·Programing/JAVA

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
'Programing/JAVA' 카테고리의 다른 글
  • 인터페이스 INTERFACE
  • 상속 INHERITANCE_Part3
  • 상속 INHERITANCE_Part1
  • 클래스 CLASS_Part4
쿠크
쿠크
  • 쿠크
    쿠크 개발자
    쿠크
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • Kubernetes (2)
      • Programing (35)
        • JSP (3)
        • JAVA (22)
        • Spring (5)
        • HTML (5)
      • 이외 (12)
        • Git (2)
        • 임시 잡다함 (6)
        • IntelliJ (1)
        • 에러 모음 (2)
      • OS (2)
        • Docker (0)
        • Kubernetes (0)
        • Linux (2)
      • DataBase (2)
        • Mysql (1)
      • 토이 프로젝트 (0)
        • 게시판 만들기 (0)
      • Spring (0)
      • 부동산 or 주식 (0)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 링크

    • 깃 허브 주소
  • 공지사항

  • 태그

    kubernetes
    jsp
    ubuntu
    MySQL
    error
    에러 발생
    Database
    에러원인
    java
    클래스
    spring-framwork
    Linux
    스프링 특징
    HTML
    spring-framework
    IntelliJ
    MVC
    HTTP란
    상속
    spring
  • hELLO· Designed By정상우.v4.10.3
쿠크
상속 INHERITANCE_Part2
상단으로

티스토리툴바