다형성

5BRack·2022년 6월 30일

자바란?

목록 보기
13/42

다형성

다형성 : 일반인에게 코딩을 가르쳐 개발자로 표현하겠다.

  • 객체를 여러가지 모양으로 표현할 수 있는 특성을 "다형성" 이라 한다.

매서드 오버라이딩

메서드 오버라이딩 : 부모가 준 현금재산을 비트코인으로 바꿔 사용하겠다

  • 메서드 오버라이딩(Overriding)은 부모 클래스에게 상속받은 메서드와 동일한 이름의 메서드를 재정의하는 것으로, 부모의 메서드를 자신이 만든 메서드로 덮어쓰는 개념이다.

오버라이딩의 2가지 조건

  • 부모 클래스의 메서드와 시그너처(메서드명,매개변수 타입) 및 리턴타입이 동일해야 한다
  • 부모 클래스의 메서드보다 접근 지정자의 범위가 같거나 넓어야 한다.
class A {
    void funA() {
        System.out.println("A");
    }
}

class B extends A {
    @Override			//부모클래스 funA함수 재정의
    void funA() {
        System.out.println("B");
    }
}

public class OverRidding {
    public static void main(String[] args) {
        A a = new A();
        B b = new B();
        a.funA();			// 결과값 : A
        b.funA();			// 결과값 : B
    }
}

인스턴스 필드의 중복

  • 자식 클래스에서 부모 클래스에 존재하는 필드명과 동일한 필드명을 추가하여도 필드오버라이딩은 되지 않는다.
  • 정적(static)필드 또한 오버라이딩 되지 않는다.
  • 부모의 정적(static)메서드는 오버라이딩 되지 않는다.

메서드 오버라이딩과 접근 지정자

  • 자식 클래스가 부모 클래스의 메서드를 오버라이딩할 때 에는 반드시 상속받은 메서드의 접근 지정자와 범위가 같거나 넓은 접근 지정자를 사용해야 한다.

super 키워드 와 super() 메서드

  • super 키워드는 부모의 객체를 의미한다.
  • super()메서드는 부모의 생성자를 의미한다.

super 키워드

  • 인스턴스 메서드의 내부에서 모든 필드와 메서드 앞에 있는 객체를 생략하면 this 키워드가 추출된다.
  • super.메서드명을 호출시, 부모의 메서드가 호출된다.
class A{
	funA(){
    System.out.println("A");
    }
}
class B extends A{
	@Override
    funA(){
    super.funA();
    System.out.println("B");
    }
}

public static main(String[] args){
	A a = new A();
    B b = new B();
    a.funA();		// 결과값 : A
    b.funA();		// 결과값 : A
}					// 		   B

super() 메서드

  • 클래스 A를 상속받아 클래스 B를 생성하고, B() 생성자를 이용해 객체를 생성할 때 항상 부모 클래스 객체가 먼저 생성된다.
  • 생성자 첫줄에서 super() 메서드를 호출시, 부모 생성자가 호출된다.
class A{
	A(){
    System.out.println("A 생성자");
    }
}
class B extends A{
	B(){
    System.out.println("B 생성자");
    }
}

public static main(String[] args){
	A a = new A(); // 결과값 : A 생성자 
    B b = new B(); // 결과값 : A 생성자
}				   // 		  B 생성자

0개의 댓글