package com.test.oop;
//[생성자의 역할]과, [생성자+method 오버로딩] 이해를 위한 예제.
class A { //주로 멤버변수, 생성자, method 이 순서로 두는게 좋아. (클래스 = 멤버변수+생성자+method)
int a = 3;
int b = 4;
public A(){ //이런 생성자를 클래스 안에 정의해줘야 함. 단, A() 괄호 안에 인자가 없잖아. 그러면 굳이 안적어줘도 컴파일러가 자동으로 컴파일 시 생성.
//생성자를 만듦으로써 멤버변수가 30, 40으로 각각 바뀜. 멤버변수를 초기화.
a = 30;
b = 40;
//인스턴스 생성 시 어떤 명령을 수행.
System.out.println("클래스 A 인자 없는 생성자를 통해 인스턴스생성");
}
//만약 괄호 안에 인자가 있으면 무조건 생성자 만들어줘야 함.
public A(int a, int b){ //인자를 넣은 생성자를 하나 더 생성 가능! 이렇게 하나의 클래스 안에 여러개의 생성자를 만들 수 있음.
this.a = a; //멤버변수를 지칭하는 법은 this.a --> 인자로 받아온 값을 멤버변수에 넣어주는 것.
this.b = b;
System.out.println("클래스 A 인자가 두 개인 생성자를 통해 인스턴스생성");
}
public int aa(){
return a+b;
}
public int cal(int a, int b){
return a*b;
}
public int cal(int a, int b, int c){ //위와 똑같은 이름의 method 인데에도 인자 수가 다르니까 에러 안남.
return a+b+c;
}
}
public class Exam02 {
public static void main(String[] args){
A a = new A(); //A class 생성자를 통해 인스턴스를 생성하고, 생성된 인스턴스의 주소를 a 에 할당.
A a1 = new A(100, 200);
System.out.println("인자가 없는 생성자를 통해 초기화된 멤버변수의 합 = "+a.aa());
System.out.println("인자가 2개인 생성자를 통해 초기화된 멤버변수의 합 = "+a1.aa());
System.out.println(a.cal(3, 4));
System.out.println(a.cal(6,4,5));
}
}