JavaRush /Java Blog /Random-JA /コーヒーブレイク#107。Java I コンストラクター オーバーロードのコンストラクター メソッド。抽象的な J...

コーヒーブレイク#107。Java I コンストラクター オーバーロードのコンストラクター メソッド。抽象的な Java クラスとインターフェイス

Random-JA グループに公開済み

Java I コンストラクター オーバーロードのコンストラクター メソッド

出典:オブジェクト指向プログラミング77コンストラクター とは何ですか? これは、クラスの名前と同じ名前を持つ特殊なタイプのメソッドで、オブジェクトの作成時にオブジェクトがどのように初期化されるかを決定します。 他のメソッドと同様に、 Java プログラムでConstructorコーヒーブレイク#107。 Java I コンストラクター オーバーロードのコンストラクター メソッド。 抽象的な Java クラスとインターフェイス - 1メソッドを定義することもできますが、他のメソッドとは異なり、 Constructor を直接呼び出すことはできません。Java は、オブジェクトの作成時に自動的にコンストラクターを呼び出します。newキーワードを使用してクラスのオブジェクトを作成すると、Java は次の 3 つのことを行います。
  • オブジェクトにメモリを割り当てます。
  • このオブジェクト インスタンス変数を初期値またはデフォルト値で初期化します。
  • クラスの Method コンストラクターを呼び出します。
クラスがConstructorメソッドを定義していない場合でも、そのクラスのオブジェクトを作成しますが、インスタンス変数を設定するか、他のメソッドを呼び出す必要があり、その後そのオブジェクトでオブジェクトを初期化する必要があります。独自のクラスで Constructor メソッドを定義することにより、インスタンス変数の初期値を設定したり、その変数に基づいてメソッドを呼び出したり、他のオブジェクトのメソッドを呼び出したり、オブジェクトの初期プロパティを計算したりすることができます通常のメソッドと同様にConstructor をオーバーロードして、 newに渡す引数に基づいて特定のプロパティを持つオブジェクトを作成することもできます。

基本的なコンストラクター

定義上、Constructor は通常のメソッドのように見えますが、2 つの主な違いがあります。
  • コンストラクターとクラス名は常に同じです。
  • 戻り値の型がありません
たとえば、次の表は、新しい引数に基づいてインスタンス変数を初期化するコンストラクターを備えた単純な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歳です

コンストラクターのオーバーロード

他のメソッドと同様に、Constructor はさまざまな数とタイプのパラメーターを受け入れることもでき、指定されたプロパティを使用してオブジェクトを作成したり、さまざまなタイプの入力に基づいてプロパティを計算したりできます。たとえば、指定されたテーブルの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>

別のコンストラクターを呼び出す

コンストラクターは、クラスで定義された別のコンストラクターのスーパーセットにすることができます。つまり、同じに加えてもう少し多くの動作をすることができます。クラス内の複数のコンストラクター メソッド間で同じ動作を複製するのではなく、2 番目のコンストラクターの本体から最初のコンストラクターを単純に呼び出すことができる方が合理的です。Java は、このための特別な構文を提供します。現在のクラスで定義されたコンストラクターを呼び出すには、次の形式を使用します。
this (arg1, arg2, arg3… ..);
もちろん、 これに対する 引数はコンストラクターへの引数です。

抽象的な Java クラスとインターフェイス

出典: Dev.to抽象クラスは、完全な定義のないいくつかのメソッドを持ち、 abstract修飾子 を持つクラスです。 コーヒーブレイク#107。 Java I コンストラクター オーバーロードのコンストラクター メソッド。 抽象的な Java クラスとインターフェイス - 2
  • 抽象クラスのコンストラクターを使用してオブジェクトを作成することはできません。
  • 抽象クラスを基本クラスとして使用して、派生クラスを定義できます。
  • 抽象クラスには少なくとも 1 つの抽象メソッドがあります。
  • 抽象メソッド: 通常のメソッドと同様にヘッダーがありますが、本体はなく、抽象修飾子とセミコロンが必要です。
  • 抽象メソッドをプライベートにすることはできません。
  • 抽象クラスは型になることができます。
例:
public abstract class Example{
  private String data1;
  private double data2;

public abstract double getPay();
}
Interface : このインターフェイスを実装するクラスが持つ必要があるメソッドのセットを定義します。
  • インターフェースは型です。
  • これには、定義やインスタンス変数のないメソッド ヘッダーが含まれています。
public interface Interface1{
public void method1();
public int method2();
}
インターフェイスを実装するには、クラスは次の 2 つのことを行う必要があります。
  • Include はInterfaceNameを実装します
  • クラスは、インターフェイスにリストされているすべてのメソッド ヘッダーを実装する必要があります。
public class Implementer implements Interface1 {

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

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

}
  • メソッドヘッダーはpublic として宣言されます。
  • 抽象クラスはインターフェイスを実装することもできます。このクラスはインターフェイス内のメソッド ヘッダーの一部の定義を提供します。
  • Java インターフェースには、次のようにconstantを含めることもできます。
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);
    }

}
  • 定数とメソッド ヘッダーを 1 つのインターフェイスに含めることで、インターフェイスを混在して使用できます。
  • Java は多重継承をサポートしていないため、クラスは 1 つの基本クラスのみを拡張できます。ただし、インターフェイスを使用すると、クラスは複数のインターフェイスを実装できます。
public class Implementer implements Interface1, Interface2, .. InterfaceN{

}
  • Java クラスが 1 つの基本クラスのみを拡張できる理由は、Java が 2 つの基本クラスを許可すると、2 つのクラスが異なる定義を持つ同じメソッド ヘッダーを持つ可能性があり、結果として不整合が発生するためです。
  • 同じ名前で異なる値を持つ 2 つの定数を定義すると、2 つのインターフェイスに互換性がなくなる可能性があります。
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