카테고리 없음

객체지향 (오버로드/ 생성자 )

공부하는개발자_ 2023. 5. 22. 21:01

 

메소드 오버로드
같은 클래스 내에서 메소드 이름은 같으면서, 매개 변수의 형태/ 갯수/ 순서가 다른 경우를 말한다.

사용자 입장에서 사용하기 쉽도록 하기 위한 것이다. (메소드 이름을 여러개 기억할 필요가 없기 때문에)

 

class A{ void m(){ } void m(int i(){ }   }
class B{ void m(char c){ }   }

 

- r1.make의 인자 값은 int형인데 make 메소드에 같은 타입이 없는경우 자동 형변환이 된다.
- return 타입은 무관하다. 

 

 

 

 

생성자 : 객체 생성시 자동호출되는 특수 메소드. 생성자명은 클래스명과 같고 리턴값이 없다.

위와 같은 경우 R2생성자가 이미 만들어져 있기 때문에 제공되지 않으나

소스 코드에 생성자가 하나도 없는 경우, 기본(디폴트) 생성자가 자동으로 생성된다.

public class의 기본생성자는 public으로

default class의 기본생성자는 default로 만들어짐

ex) public new R2(){ };
R2 : 생성자는 리턴타입이 없다. 메소드와 헷갈리지 말아야 한다.

 

 


this
매개변수와 멤버변수를 같게 하기 위해서.

현재사용중인 객체의 멤버변수를 정확하게 지칭하기 위해 사용한다.

 

 

 

class R2{

int width;

int height;

double area;

R2(){

 

}

R2(int w, int h){

width = w;

height = h;

make();

}

 

R2 (int width){

this.width = width;

this.height = width;

make();

 

}

 

 

 

void make () {

area = width * height;

}

void print() {

System.out.println("사각형의 면적은" + area + "입니다");

}

}

 

class C {

int radius;

double area;

 

C () {}

 

C (int r) {

radius = r;

make();

}

 

void make() {

area = radius * radius * Math.PI;

}

 

void print() {

System.out.println("반지름이 " + radius +

"인 원의 면적은 " + area + "입니다.");

}

}

 

 

/**

* 사원 객체용 클래스이다

* @author 임쥰

*

*/

class Employee{

 

 

String empNo;

String empName;

int salary;

 

Employee(){

 

}

/**

* 객체생성시 사번과 이름을 초기화한다

* @param empNo 사번

* @param empName 이름

*/

// Employee(String empNo,String empName){

// this.empName = empName;

// this.empNo = empNo;

// }

 

Employee(String empNo,String empName){

this(empNo, empName, 0);

}

 

Employee(String empNo, String empName, int salary){

this.empNo = empNo;

this.empName = empName;

this.salary = salary;

}

 

 

void print() {

System.out.println("은 입니다");

}

}

 

 

public class ConstructTest {

public static void main(String[] args) {

 

R2 r = new R2();

r.width = 3; //가로

r.height = 4; //세로

r.make(); //면적을 계산한다

r.print(); //"가로3, 세로4인 사각형의 면적은 12.0입니다" 출력

 

R2 r1 = new R2();

r1.width = 5;

r1.height = 5;

r1.make();

r1.print(); //"가로5, 세로5인 사각형의 면적은 25.0입니다" 출력

 

R2 r2 = new R2(6, 7);

r2.print(); //"가로6, 세로7인 사각형의 면적은 42.0입니다" 출력

 

C c1 = new C(); //원객체를 생성한다

c1.radius = 5;

c1.make(); //원의 면적을 계산한다

c1.print(); //"반지름이 5인 원의 면적은 xx.xxx입니다" 출력된다

 

C c2= new C(6); //반지름이 6인 원객체를 생성한다

c2.print(); //"반지름이 6인 원의 면적은 xx.xxx입니다" 출력된다

 

 

R2 r3 = new R2(8); //가로8, 세로8인 사각형객체

r3.print(); //"가로8, 세로8인 사각형의 면적은 64.0입니다" 출력된다

 

 

Employee e1 = new Employee();

e1.empNo = "2301";

e1.empName = "오문정";

e1.salary = 10000;

 

Employee e2 = new Employee("2302", "홍길동", 10000);

Employee e3 = new Employee("2303","나자바");

 

e1.print(); //"사번:2301, 사원명:오문정, 기본급:10000

e2.print(); //"사번:2302, 사원명:오문정, 기본급:10000

e2.print(); //"사번:2303, 사원명:나자바, 기본급:0

 

 

 

 

}

}