메소드 오버로딩 – 다중생성자
하나의 클래스내에 같은이름으로 여러 개의 메소드를 정의할수 있는데이를 Method Overloading 이라한다.
매개변수의 개수와 타입이 달라야 한다
메소드 Segnature : 메소드 이름, 파라미터 개수, 유형, 타입
다중생성자 : 생성자는 다른 메소드와 마찬가지로 오버로딩 할수있다.
class Sphere {
static final double PI = 3.14; //상수, 클래스변수(필드)
static int count = 0; //객체를 수를 세기위함
//인스턴스 변수
double radius; double xCenter; double yCenter; double zCenter;
//생성자1. 원점을 중심으로 반지름1인 구
Sphere() { xCenter = 0;yCenter = 0;zCenter = 0;radius = 1.0;++count;
//생성자2. 중심을 파라미터로 받음, 반지름은 default로 1
Sphere(double x, double y, double z) { xCenter = x;yCenter = y;zCenter = z;radius = 1.0;++count; }
//생성자3. 중심및 반지름을 파라미터로 받음
Sphere(double x, double y, double z, double theRadius) {
xCenter = x;yCenter = y;zCenter = z;radius = theRadius;++count;
}
//객체의 수를 돌려주는 클래스 메소드
static int getCount() { return count; }
// 체적을 계산하는 인스턴스 메소드
double volume() {return 4.0/3.0*PI*radius*radius*radius;}
}
class MultiConstructor {
public static void main(String[] args) {
System.out.println("객체의 수 : "+Sphere.getCount());
Sphere b1 = new Sphere(); //구생성
System.out.println("객체의 수 : "+Sphere.getCount());
Sphere b2 = new Sphere(1.0, 2.0, 0.0); //구생성
System.out.println("객체의 수 : "+Sphere.getCount());
Sphere b3 = new Sphere(1.0, 2.0, 0.0, 5.5); //구생성
System.out.println("객체의 수 : "+Sphere.getCount());
//구의 체적을 계산
System.out.println("b1의 체적 : "+b1.volume());
System.out.println("b2의 체적 : "+b2.volume());
System.out.println("b2의 체적 : "+b3.volume());
}
}
클래스의 생성자가 그안의 실행문에서 같은 클래스의 생성자를 호출할수 있다.
this를 사용하여 다른 생성자를 참조할수 있다.
장점 : 코드의 중복을 막을수 있다.
//생성자1. 원점을 중심으로 반지름1인 구
Sphere() {
radius = 1.0;++count; //다른 데이터 멤버는 Default 0.0
}
//생성자2. 중심을 파라미터로 받음, 반지름은 default로 1
Sphere(double x, double y, double z) {
this(); //인자없는 생성자를 호??
xCenter = x;yCenter = y;zCenter = z;
}
//생성자3. 중심및 반지름을 파라미터로 받음
Sphere(double x, double y, double z, double theRadius) {
this(x, y, z);
radius = theRadius;
}
class Circle {
//클래스 변수(필드), 상수정의
public static final double PI = 3.141592;
//클래스 메소드
public static double radianToDegree(double rads) {
return rads * 180 / PI;
}
//인스턴스 필드(변수), 원의반지름
public double r;
//인스턴스 메소드, 원의 면적계산
public double area() {
return PI * r * r;
}
//인스턴스 메소드,원주계산
public double circumference() {
return 2 * PI * r;
}
}
public class Circle1 {
//main Class
public static void main(String[] args) {
Circle c = new Circle();
c.r = 4.0;
//인스턴스 메소드 이용
System.out.println("반지름이 4인 원의 면적은 : " + c.area());
System.out.println("반지름이 4인 원의 원주는 : " + c.circumference());
//클래스 메소드및 클래스변수(필드) 이용
System.out.println("2 * PI의 Degree는 : " + Circle.radianToDegree(2.0*Circle.PI) + "도 입니다.");
}
}