본문 바로가기

Programming/자바

생활코딩 자바 - overloading

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)