메소드 오버로딩(method overloading)


1. 동일한 명칭을 가진 메소드가 두개 이상인 경우를 메소드 오버로딩 상태라고 함. 같은 클래스에 있는 두개 이상의 같은 메소드명의 메소드를 말함.

2. 메소드가 중복 정의된 상태를 말함.

3. 오버로딩된 상태가 되려면 메소드 이름은 같지만 매개변수 리스트가 달라야 한다. 자료형, 갯수, 순서등이 틀린 경우만 허용.


//Class39.java






문제) 덧셈 결과를 출력하는 메소드 만들기. 오버로딩 메소드로 구현.


1. 1부터 10까지의 합을 출력 

-> public int add()

2. 1부터 n까지의 합을 출력 

-> public int add(int n)

3. n부터 m까지의 합을 출력 

-> public int add(int n, int m)

4. n부터 m까지의 합을 출력하되, x의 배수만 계산 

-> public int add(int n, int m, int x)

5. 임의의 수를 여러개 입력 받아서 합을 출력 

-> public int add(int[] arr)


실행 예)

덧셈 결과를 출력하는 메소드 만들기

1. 1부터 10까지의 합을 출력 

2. 1부터 n까지의 합을 출력 

3. n부터 m까지의 합을 출력 

4. n부터 m까지의 합을 출력하되, x의 배수만 계산 

5. 임의의 수를 여러개 입력 받아서 합을 출력 

6. 종료

선택(1~5, 6:종료)?1


1부터 10까지 합 : xxxx


덧셈 결과를 출력하는 메소드 만들기

1. 1부터 10까지의 합을 출력 

2. 1부터 n까지의 합을 출력 

3. n부터 m까지의 합을 출력 

4. n부터 m까지의 합을 출력하되, x의 배수만 계산 

5. 임의의 수를 여러개 입력 받아서 합을 출력 

6. 종료

선택(1~5, 6:종료)?2


숫자 입력(n)? 100

1부터 100까지 합 : xxxx



//Calc.java

//Process.java

//Class40.java -> main() 포함








상속(inheritance)


1. 객체 지향 프로그램에서 가장 중요한 개념.

2. 객체 지향 프로그램의 특성

- 상속, 다양성, 은닉성, 캡슐화


3. 클래스와 클래스 사이에 부모, 자식 관계가 맺어진 상태를 상속이라고 한다. 상속 관계인 클래스들은 파생 할 수 있는 상태가 된다.

원본A 클래스(기능3가지) -> (상속) -> 파생 B 클래스(기능3가지+기능 추가)

 수퍼(부모) 클래스                   서브(자식) 클래스


파생B 클래스는 원본 A 클래스의 기능을 재구현하기 위해서 해야 할 일이 없는 상태다. -> 상속 받겠다는 구문만 추가하면 됨.

서브 클래스가 수퍼 클래스를 선택해서 상속 표현하면 수퍼 클래스의 기능을 모두 내것으로 만들 수 있다.

상속 관계가 계속 이루어지는 경우 모든 수퍼 클래스의 모든 기능은 서브 클래스가 가지게 된다.


A 클래스(3가지) -> 상속 -> B 클래스(3가지 + 2가지) -> 상속 -> C 클래스(5가지+1가지)


4. 상속 관계에서 최상위 클래스는 Object 클래스이다. Object 클래스만은 상속 표기를 하지 않아도 자동 상속된다.

5. 상속 표기

public class 서브클래스명 extends 수퍼클래스명 {

//수퍼클래스의 멤버는 자동으로 서브클래스것이 된다.

//추가 멤버 구성

}




//Class41.java







수퍼클래스, 서브클래스 구현하기


//Super.java -> 메소드 한개만 구현

package com.test;


//Object 클래스 자동 상속

public class Super {

public void method1() {

}

}


//Sub.java -> 메소드 한개만 구현

package com.test;


//super 클래스를 상속받고 있다.

public class Sub extends Super {

//Super 클래스의 멤버도 Sub 클래스의 멤버가 된다.

//sub 클래스만의 고유 멤버 추가

public void method2() {

}

}



//Class42.java -> main() 

//Sub 클래스의 멤버확인 -> 2개

package com.test;


public class Class42 {


public static void main(String[] args) {

//Sub 클래스의 객체 생성 과정

Sub obj = new Sub();

//멤버구성 확인

obj.method1(); //-> Super의 고유멤버

obj.method2(); //-> Sub의 고유멤버

}

}



6. 상속은 수퍼 클래스를 한개만 선택할 수 있다.

7. 수퍼클래스의 멤버중에서 private 멤버는 상속 받을 수 없다.

8. final 키워드가 있는 클래스는 상속 받을 수 없다.







문제) 프린터라는 원본 클래스를 가지고 파생을 시켜본다.







상속 제한1 - 수퍼클래스를 한개만 선택할 수 있다.



//Class43.java







상속 제한2 - 수퍼 클래스의 멤버중에서 private 멤버는 상속받을 수 없다.


//Super3.java

//Sub3.java

//Class44.java







상속제한3 - final 키워드가 있는 클래스는 상속 받을 수 없다.


//Class46.java








메소드 오버라이딩(method overriding)


1. 동일한 명칭을 가진 메소드가 두개 이상인 경우를 메소드 오버라이딩 상태라고 함. 단, 서로 다른 클래스에서 같은 메소드가 존재하는 경우이고, 서로 다른 클래스는 상속 관계일 때만 성립.

2. 메소드가 재정의된 상태를 말함.


class Super {

public void method() {

//기능1

}

}


class Sub extends Super {

@Override

public void method() { //메소드 오버라이딩

//기능2 -> 기능1을 재정의한 상태

}

}


class Sub2 extends Sub {

@Override

public void method() { //메소드 오버라이딩

//기능3 -> 기능2을 재정의한 상태

}

}



//Class47.java







Member 클래스의 toString() 메소드 오버라이딩 테스트


//Member.java -> 이름, 전화번호 저장용 클래스

//Class48.java









문제) 덧셈 결과를 출력하는 메소드 만들기. toString()메소드를 오버라이딩하여 구현.


1. 1부터 10까지의 합을 출력 

2. 1부터 n까지의 합을 출력 

3. n부터 m까지의 합을 출력 

4. n부터 m까지의 합을 출력하되, x의 배수만 계산 



실행 예)

덧셈 결과를 출력하는 메소드 만들기

1. 1부터 10까지의 합을 출력 

2. 1부터 n까지의 합을 출력 

3. n부터 m까지의 합을 출력 

4. n부터 m까지의 합을 출력하되, x의 배수만 계산 

선택(1~5, -1:종료)?1


1부터 10까지 합 : xxxx



//Calc2.java

//Class49.java


WRITTEN BY
빨강꼬마

,