java. 오버라이딩과 오버로딩

Konseo·2022년 2월 6일
2

spring boot

목록 보기
4/8

자바에서 다형성을 지원하는 방법으로 오버라이딩오버로딩이 있다.

오버로딩 Overloading

같은 이름의 메서드를 지원하면서 매개변수의 유형개수가 다르도록 하는 기술

오버라이딩 Overriding

상위 클래스가 갖고 있던 메서드를 하위 클래스에서 재정의하여 사용하는 것
= 부모클래스의 메서드는 무시하고 자식클래스의 메서드 기능을 사용하겠다

오버로딩 예제

class OverloadingTest{
	//이름이 cat인 메소드
	void cat(){
    	System.out.println("매개변수 없음");
    }
    void cat(int a, int b){
    	System.out.println("매개변수:"+a+","+b);
    }
    void cat(String c){
    	System.out.println("매개변수:"+c);
    }
    
}

public class Overtest{
	public static main(String[] args){
    
    //OverloadingTest 객체 생성
    OverloadingTest ot = new OverloadingTest();
    
    ot.cat();
    
    ot.cat(2,3);
    
    ot.cat("hello");

이름이 cat인 메서드는 총 3개 있지만 매개변수 유형과 개수가 모두 다름을 확인 할 수 있다.

오버라이딩 예제

class Woman{
	public String name;
    public int age;
    
    //info()메서드
    public void info(){
    	System.out.println("여자의 이름은"+name+"이고, 나이는"+age+"입니다.");
    }
}

class Job extends Woman{
	String job;
    
    public void info(){
    	System.out.println("여자의 직업은"+job+"입니다.");
    }
}

public class OverridingTest{
	public static main(String[] args){
    	Job job = new Job();
        
        // 부모클래스를 상속받았으므로 자식클래스 내 별도 선언 없이 부모클래스 내 멤버변수에 접근 가능
        job.name="유리";
        job.age=20;
        job.job="프로그래머";
        
        // 호출
        job.info();
        
        //(중요) 실행결과 : 여자의 직업은 프로그래머입니다.
	}
}

자식클래스만 호출했을 때, 부모 클래스도 호출하고 싶다면?

자식클래스에서 재정의한 것 + 원래 부모 클래스에서 정의되었던 것 모두 호출하고 싶다면 어떻게 해야할까. 아래 두 가지 방식이 있다.

1. 겹쳐쓰기 = just 똑같이 추가하여 쓰기

class Job extends Woman{
	String job;
    
    public void info(){
    	System.out.println("여자의 이름은"+name+"이고, 나이는"+age+"입니다.");
        System.out.println("여자의 직업은"+job+"입니다.");
    }

2. super 예약어 쓰기

class Job extends Woman{
	String job;
    
    public void info(){
    	super.info();
        System.out.println("여자의 직업은"+job+"입니다.");
    }
profile
둔한 붓이 총명함을 이긴다

0개의 댓글