JavaRush /Java Blog /Random-KO /커피 브레이크 #107. Java I 생성자 오버로드의 생성자 메서드. 추상 Java 클래스 및 인터페...

커피 브레이크 #107. Java I 생성자 오버로드의 생성자 메서드. 추상 Java 클래스 및 인터페이스

Random-KO 그룹에 게시되었습니다

Java I 생성자 오버로드의 생성자 메서드

출처: Object Orientedprogramming77 생성자 란 무엇입니까 ? 이는 클래스 이름과 이름이 동일한 특수한 유형의 메소드로, 객체가 생성될 때 초기화되는 방법을 결정합니다. 다른 메소드와 마찬가지로 Java 프로그램에서 생성자커피 브레이크 #107.  Java I 생성자 오버로드의 생성자 메서드.  추상 Java 클래스 및 인터페이스 - 1 메소드를 정의할 수도 있지만 다른 메소드와 달리 생성자를 직접 호출할 수는 없습니다. Java는 객체가 생성될 때 자동으로 생성자를 호출합니다. new 키워드를 사용하여 클래스의 객체를 생성할 때 Java는 세 가지 작업을 수행합니다.
  • 개체에 대한 메모리를 할당합니다.
  • 초기값 또는 기본값을 사용하여 이 개체 인스턴스 변수를 초기화합니다.
  • 클래스의 Method 생성자를 호출합니다.
클래스가 생성자 메소드를 정의하지 않은 경우에도 해당 클래스의 객체를 생성하지만 인스턴스 변수를 설정하거나 다른 메소드를 호출해야 하며, 이후에 해당 객체로 객체를 초기화해야 합니다. 자체 클래스에서 생성자 메서드를 정의함으로써 인스턴스 변수의 초기 값을 설정하거나, 해당 변수를 기반으로 메서드를 호출하거나, 다른 개체에 대한 메서드를 호출하거나, 개체의 초기 속성을 계산할 수 있습니다 . 또한 new 에 전달한 인수를 기반으로 특정 속성을 갖는 객체를 생성하기 위해 일반적인 메서드처럼 Constructor를 오버로드할 수도 있습니다 .

기본 생성자

정의에 따르면 생성자는 두 가지 주요 차이점이 있는 일반 메서드처럼 보입니다.
  • 생성자 와 클래스 이름은 항상 동일합니다.
  • 반환 유형이 없습니다.
예를 들어 아래 표에서는 인수를 기반으로 인스턴스 변수를 초기화하는 생성자가 있는 간단한 Person 클래스를 보여줍니다 . 클래스에는 객체가 자신을 소개할 수 있는 메서드와 이러한 각 클래스를 테스트하기 위한 main() 메서드도 포함되어 있습니다.
class Person
{
    String name;
    int age;

    Person (String n, int a)
{
    name = n;
    age = a;
}

void printPerson ()
{
System.out.print("Hi, I am " +name);
System.out.println(" I am "+ age + " years old.");
}

public static void main(String args[])
{

    Person p;

    p = new Person ("Ajab", 20);
    p.printPerson();

    p = new Person ("Rizwan", 30);
    p.printPerson();
우리는 출력을 얻습니다:
안녕하세요 아자브입니다. 저는 20살입니다. 안녕하세요 리즈완입니다. 나는 30 살이다

생성자 오버로드

다른 방법과 마찬가지로 생성자는 다양한 수와 유형의 매개변수를 허용하여 지정된 속성을 사용하여 객체를 생성하거나 생성자가 다양한 유형의 입력을 기반으로 속성을 계산하도록 허용할 수 있습니다. 예를 들어, 지정된 테이블의 MyRectone 클래스는 MyRectone 생성자를 만들고 지정된 인수에 대해 다른 메서드를 만드는 대신 다른 매개 변수를 전달합니다.
class MyRectone
 {

    int x1 = 0;
    int y1 = 0;
    int x2 = 0;
    int y2 = 0;

MyRectone ( int x1, int x2, int x2, int y2)
 {

    this.x1 = x1;
    this.y1 = y1;
    this.x2 = x2;
    this.y2 = y2;

}

MyRectone (Point topLeft, Point bottomRight)
 {

    x1 = topLeft.x;
    y1 = topLeft.y;
    x2 = bottomRight.x;
    y2 = bottomRight.y;

}

MyRectone ( Point topLeft, int w, int h)
{

    x1 = topLeft.x;
    y1 = top left.y;
    x2 = ( x1 + w);
    y2 = (y1 + h);

}

void printRect ()
{

    System.out.print ("MyRectone: <" + x1 + ", " + y1);
    system.out.println (", " + x2 + " ,"+ y2 + ">");

}

public static void main (String args [] )
{

    MyRectone rect;
    System.out.println ("Calling MyRectone with coordinates 35,35 70,70");

    rect = new MyRectone (35,35,70,70);
    rect.printRect();

    System.out.println ("Calling MyRectone with coordinates (15,15) (30,30)");
    rect = new MyRectone (15,15,30,30);
    rect.printRect();

    System.out.print (" Calling buildRect w/1 point (10,10),");
    System.out.println ("width (50) and height (50)");
    rect = new MyRectone ( new Point (10,10), 50, 50);
    rect.printRect();
결론:
좌표 35,35 70,70으로 MyRectone 호출: MyRectone: <35,35,70,70> 1포인트(15,15), (30,30)로 buildRect 호출: MyRectone: <15,15,30,30 > 1포인트(10,10), 너비(50), 높이(50)를 사용하여 buildRect 호출: MyRectone:<10,10,50,50>

다른 생성자 호출

생성자는 클래스에 정의된 다른 생성자의 상위 집합일 수 있습니다. 즉, 그들은 동일하게 행동하고 조금 더 행동할 수 있습니다. 클래스의 여러 생성자 메서드에서 동일한 동작을 복제하는 대신 두 번째 생성자의 본문에서 첫 번째 생성자를 간단히 호출할 수 있는 것이 합리적입니다. Java는 이에 대한 특별한 구문을 제공합니다. 현재 클래스에 정의된 생성자를 호출하려면 다음 형식을 사용합니다.
this (arg1, arg2, arg3… ..);
물론 이에 대한 인수는 생성자에 대한 인수입니다.

추상 Java 클래스 및 인터페이스

출처: Dev.to 추상 클래스는 전체 정의가 없는 일부 메서드와 abstract 한정자 가 있는 클래스입니다 . 커피 브레이크 #107.  Java I 생성자 오버로드의 생성자 메서드.  추상 Java 클래스 및 인터페이스 - 2
  • 추상 클래스의 생성자를 사용하여 객체를 만들 수 없습니다.
  • 추상 클래스를 기본 클래스로 사용하여 파생 클래스를 정의할 수 있습니다.
  • 추상 클래스에는 하나 이상의 추상 메서드가 있습니다.
  • 추상 메서드(Abstract method) : 일반 메서드와 같은 헤더가 있지만 본문이 없으며 추상 수식자 와 세미콜론이 필요합니다.
  • 추상 메서드는 비공개일 수 없습니다.
  • 추상 클래스는 유형일 수 있습니다.
예:
public abstract class Example{
  private String data1;
  private double data2;

public abstract double getPay();
}
인터페이스 : 이 인터페이스를 구현하는 모든 클래스에 있어야 하는 메서드 집합을 정의합니다.
  • 인터페이스는 유형입니다.
  • 정의도 없고 인스턴스 변수도 없는 메소드 헤더가 포함되어 있습니다.
public interface Interface1{
public void method1();
public int method2();
}
인터페이스를 구현하려면 클래스가 다음 두 가지 작업을 수행해야 합니다.
  • 포함은 InterfaceName 을 구현합니다 .
  • 클래스는 인터페이스에 나열된 모든 메서드 헤더를 구현해야 합니다.
public class Implementer implements Interface1 {

    @Override
    public void method1() {
    //definition
    }

    @Override
    public int method2() {
    //definition
    }

}
  • 메소드 헤더는 public 으로 선언됩니다 .
  • 추상 클래스는 인터페이스를 구현할 수도 있습니다. 이 클래스는 인터페이스의 일부 메소드 헤더에 대한 정의를 제공합니다.
  • Java 인터페이스에는 다음과 같은 상수가 포함될 수도 있습니다 .
public interface Constant {

    public static final int JANUARY = 1, FEBRUARY = 2, MARCH = 3;
}
  • Constant 인터페이스를 구현하는 모든 클래스는 자동으로 다음과 같은 상수를 갖습니다.
public class Constants implements Constant {

    public static void main(String[] args) {
        System.out.println(JANUARY);
    }

}
  • 상수와 메서드 헤더를 단일 인터페이스에 포함하여 인터페이스 사용을 혼합할 수 있습니다.
  • Java는 다중 상속을 지원하지 않으므로 클래스는 하나의 기본 클래스만 확장할 수 있습니다. 그러나 인터페이스를 사용하면 클래스가 여러 인터페이스를 구현할 수 있습니다.
public class Implementer implements Interface1, Interface2, .. InterfaceN{

}
  • Java 클래스가 하나의 기본 클래스만 확장할 수 있는 이유는 Java가 두 개의 기본 클래스를 허용하는 경우 두 클래스가 서로 다른 정의를 가진 동일한 메소드 헤더를 갖게 되어 불일치가 발생할 수 있기 때문입니다.
  • 이름이 같고 값이 다른 두 개의 상수를 정의하면 두 인터페이스가 호환되지 않을 수 있습니다.
public interface Interface1{
public static final int ANSWEAR = 0;
}
public interface Interface1{
public static final int ANSWEAR = 3;
}
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION