ID_DI
DI's study notes
ID_DI
전체 방문자
오늘
어제
  • 분류 전체보기 (85)
    • Deep-Learning (3)
      • CNN (2)
      • NLP (1)
    • Data_Python (6)
      • Numpy (0)
      • Matplotlib (4)
    • Python (8)
      • Python Algorithm (6)
    • Java (36)
      • Java(base) (33)
      • Java practice(base) (2)
    • Git (12)
    • Algorithm (7)
    • etc (7)
    • linux (1)
    • DeskSetup (0)
    • TIL_모각코 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Github
  • 정렬
  • 자바
  • 합병정렬
  • java.net
  • binarySearch
  • string to int
  • git
  • java.lang
  • java 기초
  • java base
  • matplotlib
  • git add.
  • 파이썬
  • README.md
  • 알고리즘
  • staged
  • Python
  • java
  • 커밋

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ID_DI

DI's study notes

[Java] 다형성 Polymorphism : Overloading(오버로딩), Overriding(오버라이딩)
Java/Java(base)

[Java] 다형성 Polymorphism : Overloading(오버로딩), Overriding(오버라이딩)

2021. 11. 29. 19:16

다형성(Polymorphism)

  1. 오버로딩

    • 같은 이름의 메소드를 여러 개를 선언하는 기법이다.
    • 매개변수의 개수 혹은 타입이 다르면 같은 이름의 메소드로 여러개 선언할 수 있다.
    • 이름이 아니라 매개변수로 구별이 가능하다.
    • 전달된 값의 타입 혹은 개수로 알아서 구분하여 알맞은 메소드가 자동으로 호출된다.
    //overloading
    void dog(){
        System.out.println("매개변수 없음");
    }
    void dog(int a, int b){
        System.out.println("매개변수: " + a + b);
    }
    void dog(String c){
        System.out.println("매개변수: " + c);
    }

    오버로딩의 예 : 기본생성자와 매개변수가 있는 생성자가 동시에 있는 클래스

    보통 기본생성자를 선언해줌

  2. 오버라이딩(Overriding) : 재정의

    • 부모 필드에 이미 a() 라는 메소드가 존재한다면 자식 객체 생성시 부모 생성자가 먼저 호출되기 때문에, 부모 클래스의 a()가 먼저 메모리에 올라간다
    • 그 다음 자식 필드를 완성시킬 때 같은 이름의 a()라는 메소드가 선언되어 있다면, 같은 이름으로 2개가 만들어지는 것이 아니라 기존에 만들어진 부모 필드의 a()메소드에 자식에서 작성한 메소드가 덮어씌워진다.
    • 자식 객체 a() 메소드를 사용하게 되면 재정의된 기능으로 사용하며 이것을 오버라이딩이라고 한다.
    class Car{
        String brand;
        String color;
        int price;
    
        public Car(String brand, String color, int price) {
            this.brand = brand;
            this.color = color;
            this.price = price;
        }
    
        void engineStart() {
            System.out.println(brand+" 열쇠로 시동켜기");
        }
    
        void engineStop() {
            System.out.println(brand+" 열쇠로 시동 끄기");
        }
    }
    
    class SuperCar extends Car{
        public SuperCar(String brand, String color, int price, String pw) {
            super(brand, color, price);
            this.pw = pw;
        }
        @Override
        void engineStart() {
            System.out.println(brand+" 원격으로 시동켜기");
        }
        @Override
        void engineStop() {
            System.out.println(brand+" 원격으로 시동 끄기");
        }

    <Overloading과 Overriding의 차이점>

    구분 오버로딩 오버라이딩
    메서드 이름 동일 동일
    매개변수, 타입 다름 동일
    리턴 타입 상관없음 동일

'Java > Java(base)' 카테고리의 다른 글

[Java] Upcasting(업캐스팅), Downcasting(다운캐스팅), instanceof  (0) 2021.11.30
[Java] static (정적) : 모든 객체가 공유  (0) 2021.11.29
[Java] 상속(inheritance), 자식클래스 생성자, super()  (0) 2021.11.29
[Java] 클래스의 개념, 선언, 사용, 생성자, this  (0) 2021.11.29
[Java] storage class(저장 기억 부류) : 변수 종류 //지역변수 전역변수 정적 변수  (0) 2021.11.29
    'Java/Java(base)' 카테고리의 다른 글
    • [Java] Upcasting(업캐스팅), Downcasting(다운캐스팅), instanceof
    • [Java] static (정적) : 모든 객체가 공유
    • [Java] 상속(inheritance), 자식클래스 생성자, super()
    • [Java] 클래스의 개념, 선언, 사용, 생성자, this
    ID_DI
    ID_DI
    Computer Vision

    티스토리툴바