overloading
같은 이름이지만 서로 다른 매개변수의 형식을 갖고 있는 메소드를 여러 개 정의
class Calculator{
int left, right;
int third = 0;
public void setOprands(int left, int right) {
System.out.println("setOprands(int left, int right)");
this.left = left;
this.right = right;}
public void setOprands(int left, int right, int third) {
System.out.println("setOprands(int left, int right, int third)");
this.left = left;
this.right = right; => 중복
this.third = third;}
public void sum() {
System.out.println(this.left+this.right+this.third);
}
public void avg() {
System.out.println((this.left+this.right+this.third)/3); //계속 여기서 void 에러 떴었는데 중괄호 문제였다,,,휴
}
}
public class CalDemo {
public static void main(String[] args) {
Calculator c1 = new Calculator();
c1.setOprands(10, 20);
c1.sum();
c1.avg();
c1.setOprands(10, 20, 30);
c1.sum();
c1.avg();
}
}
- 중복 제거
class Calculator{
int left, right;
int third = 0;
public void setOprands(int left, int right) {
System.out.println("setOprands(int left, int right)");
this.left = left;
this.right = right;}
public void setOprands(int left, int right, int third) {
this.setOprands(left, right);
System.out.println("setOprands(int left, int right, int third)");
this.third = third;}
public void sum() {
System.out.println(this.left+this.right+this.third);
}
public void avg() {
System.out.println((this.left+this.right+this.third)/3);
}
}
public class CalDemo {
public static void main(String[] args) {
Calculator c1 = new Calculator();
c1.setOprands(10, 20);
c1.sum();
c1.avg();
c1.setOprands(10, 20, 30);
c1.sum();
c1.avg();
}
}
오버로딩의 규칙
오버로딩 : 매개변수 다르면 이름 같아도 서로 다른 메소드 되는 것
but 매개변수 같지만 리턴값 다르면 오류 발생
- 오류
public class OverloadingDemo {
void A () {System.out.println("void A ()");}
void A(int arg1) {System.out.println("void A (int arg1)");}
//void A(int arg12) {System.out.println("void A (int arg1)");} => 매개변수의 이름이 달라도 타입 같으면 오류 발생
void A(String arg1) {System.out.println("void A (string arg1)");} // int A () {System.out.println("void A ()");}
public static void main(String[] args) {
OverloadingDemo od = new OverloadingDemo();
od.A();
od.A(1);
od.A("coding everbody");
}}
public class OverloadingDemo2 extends OverloadingDemo {
void A(String arg1, String arg2) {System.out.println("sub class : void A (String arg1, String arg2)");} => 오버라이딩(메소드 추가)
void A () {System.out.println("sub class : void A ()");} => 오버라이딩(메소드 변경/덮어쓰기)
public static void main(String[] args) {
OverloadingDemo2 od = new OverloadingDemo2();
od.A();
od.A(1);
od.A("coding everbody");
}}
//sub class : void A ()
void A (int arg1)
void A (string arg1)
sub class : void A (String arg1, String arg2)
'Programming > 자바' 카테고리의 다른 글
생활코딩 자바 - 패키지 ?? (0) | 2022.04.07 |
---|---|
생활코딩 자바 - 클래스패스 ?? (0) | 2022.04.06 |
생활코딩 자바 - overriding ?? (0) | 2022.04.02 |
생활코딩 자바 - 상속과 생성자 ?? (0) | 2022.04.02 |
생활코딩 자바 - 상속 (0) | 2022.04.02 |