Java-オブジェクトとクラス
Javaはオブジェクト指向言語です。オブジェクト指向機能を備えた言語として、Javaは次の基本的な概念をサポートしています。
- Polymorphism
- Inheritance
- Encapsulation
- Abstraction
- Classes
- Objects
- Instance
- Method
- メッセージパッシング
この章では、クラスとオブジェクトの概念について説明します。
Object−オブジェクトには状態と動作があります。例:犬には、色、名前、品種、行動などの状態があり、尻尾を振ったり、吠えたり、食べたりします。オブジェクトはクラスのインスタンスです。
Class −クラスは、そのタイプのオブジェクトがサポートする動作/状態を説明するテンプレート/ブループリントとして定義できます。
Javaのオブジェクト
ここで、オブジェクトとは何かを詳しく見ていきましょう。現実の世界を考えると、車、犬、人間など、身の回りにたくさんの物体があります。これらの物体にはすべて、状態と動作があります。
犬を考えると、その状態は-名前、品種、色であり、行動は-吠え、尻尾を振って、走っています。
ソフトウェアオブジェクトを実際のオブジェクトと比較すると、それらの特性は非常に似ています。
ソフトウェアオブジェクトにも状態と動作があります。ソフトウェアオブジェクトの状態はフィールドに保存され、動作はメソッドを介して表示されます。
したがって、ソフトウェア開発では、メソッドはオブジェクトの内部状態で動作し、オブジェクト間の通信はメソッドを介して行われます。
Javaのクラス
クラスは、個々のオブジェクトが作成される青写真です。
以下はクラスのサンプルです。
例
public class Dog {
String breed;
int age;
String color;
void barking() {
}
void hungry() {
}
void sleeping() {
}
}
クラスには、次の変数タイプのいずれかを含めることができます。
Local variables−メソッド、コンストラクター、またはブロック内で定義された変数は、ローカル変数と呼ばれます。変数はメソッド内で宣言および初期化され、メソッドが完了すると変数は破棄されます。
Instance variables−インスタンス変数は、クラス内でメソッド外の変数です。これらの変数は、クラスがインスタンス化されるときに初期化されます。インスタンス変数には、その特定のクラスの任意のメソッド、コンストラクター、またはブロック内からアクセスできます。
Class variables −クラス変数は、staticキーワードを使用して、クラス内、メソッド外で宣言された変数です。
クラスには、さまざまな種類のメソッドの値にアクセスするためのメソッドをいくつでも含めることができます。上記の例では、barking()、hungry()、sleeping()がメソッドです。
以下は、Java言語のクラスを調べるときに議論する必要のある重要なトピックのいくつかです。
コンストラクター
クラスについて議論するとき、最も重要なサブトピックの1つはコンストラクターです。すべてのクラスにはコンストラクターがあります。クラスのコンストラクターを明示的に記述しない場合、Javaコンパイラーはそのクラスのデフォルトコンストラクターを構築します。
新しいオブジェクトが作成されるたびに、少なくとも1つのコンストラクターが呼び出されます。コンストラクターの主なルールは、クラスと同じ名前にする必要があるということです。クラスは複数のコンストラクターを持つことができます。
以下はコンストラクターの例です-
例
public class Puppy {
public Puppy() {
}
public Puppy(String name) {
// This constructor has one parameter, name.
}
}
Javaは、クラスのインスタンスを1つだけ作成できるシングルトンクラスもサポートしています。
Note−2つの異なるタイプのコンストラクターがあります。コンストラクターについては、次の章で詳しく説明します。
オブジェクトの作成
前述のように、クラスはオブジェクトの青写真を提供します。つまり、基本的に、オブジェクトはクラスから作成されます。Javaでは、newキーワードを使用して新しいオブジェクトを作成します。
クラスからオブジェクトを作成する場合、3つのステップがあります-
Declaration −オブジェクトタイプの変数名を持つ変数宣言。
Instantiation −'new 'キーワードは、オブジェクトの作成に使用されます。
Initialization−'new 'キーワードの後に、コンストラクターが呼び出されます。この呼び出しは、新しいオブジェクトを初期化します。
以下はオブジェクトの作成例です-
例
public class Puppy {
public Puppy(String name) {
// This constructor has one parameter, name.
System.out.println("Passed Name is :" + name );
}
public static void main(String []args) {
// Following statement would create an object myPuppy
Puppy myPuppy = new Puppy( "tommy" );
}
}
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
出力
Passed Name is :tommy
インスタンス変数とメソッドへのアクセス
インスタンス変数とメソッドは、作成されたオブジェクトを介してアクセスされます。インスタンス変数にアクセスするには、以下は完全修飾パスです-
/* First create an object */
ObjectReference = new Constructor();
/* Now call a variable as follows */
ObjectReference.variableName;
/* Now you can call a class method as follows */
ObjectReference.MethodName();
例
この例では、クラスのインスタンス変数とメソッドにアクセスする方法について説明します。
public class Puppy {
int puppyAge;
public Puppy(String name) {
// This constructor has one parameter, name.
System.out.println("Name chosen is :" + name );
}
public void setAge( int age ) {
puppyAge = age;
}
public int getAge( ) {
System.out.println("Puppy's age is :" + puppyAge );
return puppyAge;
}
public static void main(String []args) {
/* Object creation */
Puppy myPuppy = new Puppy( "tommy" );
/* Call class method to set puppy's age */
myPuppy.setAge( 2 );
/* Call another class method to get puppy's age */
myPuppy.getAge( );
/* You can access instance variable as follows as well */
System.out.println("Variable Value :" + myPuppy.puppyAge );
}
}
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
出力
Name chosen is :tommy
Puppy's age is :2
Variable Value :2
ソースファイル宣言ルール
このセクションの最後の部分として、ソースファイルの宣言ルールを見てみましょう。これらのルールは、ソースファイルでクラス、インポートステートメント、およびパッケージステートメントを宣言するときに不可欠です。
ソースファイルごとに存在できるパブリッククラスは1つだけです。
ソースファイルには、複数の非公開クラスを含めることができます。
パブリッククラス名は、ソースファイルの名前でもある必要があります。 .java最後に。例:クラス名がpublic class Employee {}の場合、ソースファイルはEmployee.javaのようになります。
クラスがパッケージ内で定義されている場合、packageステートメントはソースファイルの最初のステートメントである必要があります。
インポートステートメントが存在する場合は、パッケージステートメントとクラス宣言の間に記述する必要があります。パッケージステートメントがない場合は、インポートステートメントをソースファイルの最初の行にする必要があります。
importおよびpackageステートメントは、ソースファイルに存在するすべてのクラスを意味します。ソースファイル内の異なるクラスに異なるインポートおよび/またはパッケージステートメントを宣言することはできません。
クラスにはいくつかのアクセスレベルがあり、さまざまなタイプのクラスがあります。抽象クラス、最終クラスなど。これらすべてについては、アクセス修飾子の章で説明します。
上記のタイプのクラスとは別に、Javaには内部クラスおよび匿名クラスと呼ばれるいくつかの特別なクラスもあります。
Javaパッケージ
簡単に言えば、これはクラスとインターフェイスを分類する方法です。Javaでアプリケーションを開発する場合、何百ものクラスとインターフェースが作成されるため、これらのクラスを分類することは必須であり、作業がはるかに簡単になります。
インポートステートメント
Javaでは、パッケージとクラス名を含む完全修飾名が指定されている場合、コンパイラーはソースコードまたはクラスを簡単に見つけることができます。Importステートメントは、コンパイラーがその特定のクラスを見つけるための適切な場所を指定する方法です。
たとえば、次の行は、ディレクトリjava_installation / java / io-で使用可能なすべてのクラスをロードするようにコンパイラに要求します。
import java.io.*;
簡単なケーススタディ
ケーススタディでは、2つのクラスを作成します。それらはEmployeeとEmployeeTestです。
最初にメモ帳を開き、次のコードを追加します。これはEmployeeクラスであり、クラスはパブリッククラスであることを忘れないでください。ここで、このソースファイルをEmployee.javaという名前で保存します。
Employeeクラスには、名前、年齢、指定、給与の4つのインスタンス変数があります。このクラスには、パラメーターを受け取る明示的に定義されたコンストラクターが1つあります。
例
import java.io.*;
public class Employee {
String name;
int age;
String designation;
double salary;
// This is the constructor of the class Employee
public Employee(String name) {
this.name = name;
}
// Assign the age of the Employee to the variable age.
public void empAge(int empAge) {
age = empAge;
}
/* Assign the designation to the variable designation.*/
public void empDesignation(String empDesig) {
designation = empDesig;
}
/* Assign the salary to the variable salary.*/
public void empSalary(double empSalary) {
salary = empSalary;
}
/* Print the Employee details */
public void printEmployee() {
System.out.println("Name:"+ name );
System.out.println("Age:" + age );
System.out.println("Designation:" + designation );
System.out.println("Salary:" + salary);
}
}
このチュートリアルで前述したように、処理はmainメソッドから始まります。したがって、このEmployeeクラスを実行するには、mainメソッドが必要であり、オブジェクトを作成する必要があります。これらのタスク用に別のクラスを作成します。
以下は、EmployeeTestクラスです。このクラスは、Employeeクラスの2つのインスタンスを作成し、各オブジェクトのメソッドを呼び出して、各変数に値を割り当てます。
次のコードをEmployeeTest.javaファイルに保存します。
import java.io.*;
public class EmployeeTest {
public static void main(String args[]) {
/* Create two objects using constructor */
Employee empOne = new Employee("James Smith");
Employee empTwo = new Employee("Mary Anne");
// Invoking methods for each object created
empOne.empAge(26);
empOne.empDesignation("Senior Software Engineer");
empOne.empSalary(1000);
empOne.printEmployee();
empTwo.empAge(21);
empTwo.empDesignation("Software Engineer");
empTwo.empSalary(500);
empTwo.printEmployee();
}
}
ここで、両方のクラスをコンパイルしてからEmployeeTestを実行し、次のように結果を確認します。
出力
C:\> javac Employee.java
C:\> javac EmployeeTest.java
C:\> java EmployeeTest
Name:James Smith
Age:26
Designation:Senior Software Engineer
Salary:1000.0
Name:Mary Anne
Age:21
Designation:Software Engineer
Salary:500.0
次は何ですか?
次のセッションでは、Javaの基本的なデータ型と、Javaアプリケーションを開発するときにそれらを使用する方法について説明します。