Java クラスとオブジェクトを理解する前に、オブジェクト指向プログラミングを簡単に紹介します。プログラミングとは、オブジェクトを通じてプログラムを設計することであり、オブジェクトは実体を表し、その実体を明確に識別できます。
オブジェクト指向言語としての Java。次の基本概念がサポートされています。
ポリモーフィズム
継承する
カプセル化
抽象的な
親切
物体
例
方法
メッセージの解析
このセクションでは、オブジェクトとクラスの概念に焦点を当てます。
オブジェクト: オブジェクトはクラスのインスタンスであり、状態と動作を持ちます。たとえば、犬はオブジェクトです。そのステータスには、色、名前、品種が含まれます。また、その行動には、尻尾を振る、吠える、食べるなどがあります。
クラス: クラスは、オブジェクトのクラスの動作とステータスを記述するテンプレートです。
では、オブジェクトとは何かを詳しく見てみましょう。あなたの周りの現実世界を見ると、車、犬、人など、多くの物体があなたの周りにあることがわかります。これらすべてのオブジェクトには独自の状態と動作があります。
犬を例に挙げると、そのステータスには名前、品種、色が含まれ、その行動には吠える、尻尾を振る、走るなどがあります。
実際のオブジェクトとソフトウェア オブジェクトを比較すると、それらは非常に似ています。
ソフトウェア オブジェクトにも状態と動作があります。ソフトウェア オブジェクトの状態はその属性であり、その動作はメソッドを通じて反映されます。
ソフトウェア開発では、メソッドはオブジェクトの内部状態の変化に作用し、オブジェクト間の相互呼び出しもメソッドを通じて行われます。
クラスは、Java オブジェクトを作成するためのテンプレートと考えることができます。
次の簡単なクラスを通して、Java のクラスの定義を理解しましょう。
パブリッククラス Dog{
ひもの品種。
年齢;
文字列の色。
無効な吠え(){
}
void ハングリー(){
}
void sleep(){
}
}
クラスには次のタイプの変数を含めることができます。
ローカル変数: メソッド、コンストラクター、またはステートメント ブロックで定義された変数はローカル変数と呼ばれます。変数の宣言と初期化はすべてメソッド内で行われ、メソッドが終了すると、変数は自動的に破棄されます。
メンバー変数: メンバー変数は、クラス内およびメソッド本体の外で定義される変数です。このような変数は、オブジェクトの作成時にインスタンス化されます。メンバー変数には、クラス メソッド、コンストラクター、およびクラス固有のステートメント ブロックによってアクセスできます。
クラス変数: クラス変数はメソッド本体の外のクラスでも宣言されますが、静的型として宣言する必要があります。
上の例では、クラスには複数のメソッドを含めることができます。barking barking()
、 hungry()
、 sleeping()
はすべて Dog クラスのメソッドです。
すべてのクラスにはコンストラクター メソッドがあります。クラスにコンストラクターが明示的に定義されていない場合、Java コンパイラーはクラスにデフォルトのコンストラクターを提供します。
オブジェクトを作成するときは、少なくとも 1 つのコンストラクター メソッドを呼び出す必要があります。コンストラクターの名前はクラスと同じである必要があります。クラスには複数のコンストラクターを含めることができます。
コンストラクターの例を次に示します。
パブリッククラスのパピー{
publicPuppy(){
}
public Puppy(文字列名){
// このコンストラクターにはパラメータが 1 つだけあります: name
}
}
オブジェクトはクラスに基づいて作成されます。 Java では、キーワードnew
を使用して新しいオブジェクトを作成します。オブジェクトを作成するには、次の 3 つの手順が必要です。
宣言: オブジェクト名とオブジェクト タイプを含むオブジェクトを宣言します。
インスタンス化: キーワードnew
を使用してオブジェクトを作成します。
初期化: new
使用してオブジェクトを作成する場合、オブジェクトを初期化するためにコンストラクター メソッドが呼び出されます。
オブジェクトの作成例を次に示します。
パブリッククラスのパピー{
public Puppy(文字列名){
//このコンストラクターにはパラメータが 1 つだけあります: name
System.out.println("子犬の名前は :" + name );
}
public static void main(String []args){
//次のステートメントは Puppy オブジェクトを作成します Puppy myPuppy = new Puppy( "tommy" );
}
}
上記のプログラムをコンパイルして実行すると、次の結果が出力されます。
子犬の名前は:tommyです
次のように、作成されたオブジェクトを通じてメンバー変数およびメンバー メソッドにアクセスします。
/* オブジェクトをインスタンス化します */
ObjectReference = 新しいコンストラクター();
/* 変数にアクセスします */
オブジェクト参照.変数名;
/* クラス内のメソッドにアクセスします */
オブジェクト参照.メソッド名();
次の例は、インスタンス変数にアクセスしてメンバー メソッドを呼び出す方法を示しています。
パブリッククラスのパピー{
int puppyAge;
public Puppy(文字列名){
// このコンストラクターにはパラメータが 1 つだけあります: name
System.out.println("渡された名前は :" + name );
}
public void setAge( int age ){
子犬の年齢 = 年齢;
}
public int getAge( ){
System.out.println("子犬の年齢は :" + puppyAge );
子犬の年齢を返します。
}
public static void main(String []args){
/* オブジェクトを作成します */
子犬 myPuppy = 新しい子犬( "tommy" );
/* メソッドを通じて年齢を設定します */
myPuppy.setAge(2);
/* 別のメソッドを呼び出して年齢を取得します */
myPuppy.getAge( );
/*次のようにメンバー変数にアクセスすることもできます */
System.out.println("変数値 :" + myPuppy.puppyAge );
}
}
上記のプログラムをコンパイルして実行すると、次の結果が得られます。
渡された名前は :tommy です
子犬の年齢:2
変数値:2
このセクションの最後の部分では、ソース ファイルの宣言規則について学びます。ソース ファイル内で複数のクラスを定義する場合、およびimport
ステートメントとpackage
ステートメントがある場合は、これらの規則に特に注意してください。
ソース ファイル内に存在できるpublic
クラスは 1 つだけです
ソース ファイルには複数の非public
クラスを含めることができます
ソース ファイルの名前は、 public
クラスのクラス名と一致している必要があります。たとえば、ソース ファイル内のpublic
クラスのクラス名がEmployee
である場合、ソース ファイルの名前はEmployee.java
にする必要があります。
クラスがパッケージ内で定義されている場合、 package
ステートメントはソース ファイルの最初の行にある必要があります。
ソース ファイルにimport
ステートメントが含まれている場合は、それをpackage
ステートメントとクラス定義の間に配置する必要があります。 package
ステートメントがない場合は、 import
ステートメントがソース ファイルの最初にある必要があります。
import
ステートメントとpackage
ステートメントは、ソース ファイルで定義されているすべてのクラスに対して有効です。同じソース ファイル内で、異なるクラスに異なるパッケージ宣言を与えることはできません。
クラスにはいくつかのアクセス レベルがあり、クラスは抽象クラス、 final
クラスなどのさまざまなタイプにも分類されます。これらについては、アクセス制御の章で説明します。
上記の型に加えて、Java には内部クラスや匿名クラスなどの特別なクラスもいくつかあります。
パッケージは主にクラスとインターフェイスを分類するために使用されます。 Java プログラムを開発する場合、数百または数千のクラスを作成する場合があるため、クラスとインターフェイスを分類する必要があります。
Java では、パッケージ名とクラス名を含む完全な修飾名が指定されている場合、Java コンパイラーはソース コードまたはクラスを簡単に見つけることができます。 Import
ステートメントは、コンパイラーが特定のクラスを見つけられるように、適切なパスを提供するために使用されます。
たとえば、次のコマンド ラインは、java_installation/java/io パス内のすべてのクラスをロードするようにコンパイラに指示します。
java.io.* をインポートします。
この例では、Employee と EmployeeTest という 2 つのクラスを作成します。
まずテキスト エディターを開き、次のコードをそこに貼り付けます。ファイルは Employee.java として保存されることに注意してください。
Employee クラスには、名前、年齢、役職、給与の 4 つのメンバー変数があります。このクラスは、パラメーターを 1 つだけ持つコンストラクター メソッドを明示的に宣言します。
java.io.* をインポートします。
パブリッククラスの従業員{
文字列名。
年齢;
文字列指定。
倍の給料。
// Employee クラスのコンストラクター public Employee(String name){
this.name = 名前;
}
//年齢の値を設定 public void empAge(int empAge){
年齢 = 従業員の年齢;
}
/*指定値を設定*/
public void empDesignation(String empDesig){
指定 = empDesig;
}
/*給与の値を設定します*/
public void empSalary(double empSalary){
給与 = empSalary;
}
/* 情報を印刷します */
public void printEmployee(){
System.out.println("名前:"+ 名前 );
System.out.println("年齢:" + 年齢 );
System.out.println("指定:" + 指定 );
System.out.println("給与:" + 給与);
}
}
プログラムの実行はmain
メソッドから開始されます。このプログラムを実行するには、 main
メソッドをインクルードし、インスタンス オブジェクトを作成する必要があります。
EmployeeTest クラスを以下に示します。これは、Employee クラスの 2 つのインスタンスをインスタンス化し、メソッドを呼び出して変数の値を設定します。
次のコードを EmployeeTest.java ファイルに保存します。
java.io.* をインポートします。
パブリック クラス EmployeeTest{
public static void main(String args[]){
/* コンストラクターを使用して 2 つのオブジェクトを作成します */
従業員 empOne = 新しい従業員("ジェームズ・スミス");
従業員 empTwo = 新しい従業員("メアリー アン");
//これら 2 つのオブジェクトのメンバー メソッドを呼び出します empOne.empAge(26);
empOne.empDesignation("上級ソフトウェア エンジニア");
empOne.empSalary(1000);
empOne.printEmployee();
empTwo.empAge(21);
empTwo.empDesignation("ソフトウェア エンジニア");
empTwo.empSalary(500);
empTwo.printEmployee();
}
}
これら 2 つのファイルをコンパイルし、EmployeeTest クラスを実行すると、次の結果が表示されます。
C:>javac従業員.java
C :> vi EmployeeTest.java
C:>javacEmployeeTest.java
C:>java従業員テスト
名前:ジェームス・スミス
年齢:26
役職:シニア ソフトウェア エンジニア
給与:1000.0
名前:メアリー・アン
年齢:21
役職:ソフトウェアエンジニア
給与:500.0