메소드 오버로딩 – 다중생성자

홈 > 공유팁! > 프로그램 관련
프로그램 관련

메소드 오버로딩 – 다중생성자

꽁스짱 0 1140

하나의 클래스내에 같은이름으로 여러 개의 메소드를 정의할수 있는데이를 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) + "도 입니다.");
}
} 

0 Comments
제목