이름이 같아도 파라미터의 수, 순서, 타입이 다르면 다른 메소드로 인지
다른 메소드로 인지 = 메소드 오버로딩
[ 메소드 오버로딩(overloading) ]
같은 이름의 메소드를 중복하여 정의하는 것을 의미합니다.
자바에서는 원래 한 클래스 내에 같은 이름의 메소드를 둘 이상 가질 수 없습니다.
하지만 매개변수의 개수나 타입을 다르게 하면, 하나의 이름으로 메소드를 작성할 수 있습니다.
면접에서 많이 물어봄!!
1. 오버로드 / 오버로딩 = 같은 이름의 메소드, 메소드 시그니쳐
= 한 클래스 내에서는 같은 이름의 메소드가 있으면 안됨.
= 파라미터가 다르면 같은 이름으로 메소드명을 만들 수 있음
= 파라미터의 갯수, 순서, 타입이 다르면 다른 메소드
= 메소드 호출할 때 파라미터로 구분해서 호출합니다.
2. 오버라이드 / 오버라이딩 = (상속, 부모자식관계) _________책 p.310
= 상위(부모) 클래스에 있는 메소드와 동일한 메소드를
= 하위(자식) 클래스에서 재정의 해서 사용하는 것.
3. 인터페이스 아는지_________책 p.370
= 자바는 다중 상속이 불가능 -> 이를 극복하기 위해 나옴
= 인터페이스는 스스로 객체를 생성하지 못함. 상속용도로 사용하기 위함.
= 인터페이스는 미구현 메소드(바디가 없음)로 구성됨
?? 인터페이스 <-> 클래스
[ 메소드 오버로딩 ] _ 메소드에만 적용 (변수나 클래스는 불가능)
package human;
public class Human {
// 같은 이름인 add 메소드 여러개 생성 가능!
public void add(int num1, int num2) {
}
public void add(int num1, int num2, int num3) {
}
public void add(long num1, int num2) {
}
public static void main(String[] args) {
}
}
( 1. 파라미터의 갯수가 다르면 가능 ) _ 다른 메소드로 인식
public void add(int num1, int num2) {
}
public void add(int num1, int num2, int num3) {
}
( 2. 파라미터의 데이터타입이 다르면 가능 )
public void add(int num1, int num2) {
}
public void add(long num1, int num2) {
}
( 3. 파라미터의 데이터타입의 순서가 다르면 가능 )
public void add(int num1, long num2) {
}
public void add(long num1, int num2) {
}
ex) .println() --> 모든 종류의 데이터타입 출력가능
이미 만들어져 있는 여러가지의 print() 메소드들 중에서 각 데이터 타입에 해당하는 메소드를 가져와 사용한것.
System.out.println(100);
System.out.println(100L);
System.out.println(true);
System.out.println("출력");
실제로 int, long, array, string, boolean 등의 값을 출력해보고 속성 들어가보면
public void println(int x) {~~
public void println(long x) { ~~
...
만들어져 있음!
[ 생성자 ]
[ 기본생성자 ]
package human;
public class Human {
public void add(int num1, int num2) {
int result = num1 + num2; // 지역변수 result는 add()실행이 끝나면 삭제됨.
System.out.println(result);
}
public static void main(String[] args) {
// 생성자 : 생성자도 메소드 : 객체의 초기화 담당
Human h = new Human(); // --> 기본생성자 (클래스명과 동일)
h.add(10, 20); // 30
}
}
[ 생성자 선언 ]
package human;
public class Human {
// 생성자 (클래스명과 동일)
public Human(String n) { // 객체 생성용도로만 사용!!!! 메서드랑 다름
}
public Human(int a) {
}
public Human(int a, String n) {
}
public static void main(String[] args) {
Human h = new Human("홍길동"); // 생성자 호출해서 객체생성 (데이터타입 맞춰줘야함*)
Human h1 = new Human(30);
Human h2 = new Human(30, "홍길동");
}
}
( 매개변수 여러개인 경우 )_ 연산메소드
package human;
public class Human {
public void add(int... i) { // 파라미터가 무한개 입력되었다면
int result = 0;
for (int j = 0; j < i.length; j++) {
result += i[j];
}
System.out.println(result);
}
public static void main(String[] args) {
Human h = new Human();
h.add(1, 2, 3, 4, 5); // 15
h.add(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); // 11
}
}
* public void add ( int... i ) -- > 모든 i의 값을 받아오겠다는 의미
(참고) _ 자주하는 실수
if(true) {
System.out.println("!");
} {
System.out.println("W??");
}
// !
// W??
* 둘다출력됨!!! 괄호주의
'국비과정 > JAVA' 카테고리의 다른 글
20230616 _[11일차]_03. 여러생성자 만들기 연습 & static 변수 (0) | 2023.06.20 |
---|---|
20230616 _[11일차]_02. 기본생성자 & 명시된생성자 & this (0) | 2023.06.19 |
20230615 _[10일차]_04. Arguments & 메소드 특징 & 활용 (0) | 2023.06.18 |
20230615 _[10일차]_03. 객체 지향 특징 & 활용 (0) | 2023.06.18 |
20230615 _[10일차]_02. 객체 생성 연습 (인스턴스) (0) | 2023.06.17 |