Javaのクラスの種類

Javaのクラスの種類

Javaでは、 クラス は、個々のオブジェクトを作成するための青写真です。 Java が提供するのは、 キーワード クラスを宣言できる名前付きクラス。クラス内で次のように定義します。 クラス メンバーと関数。作成することはできません Javaプログラム 授業なしで。クラスを次のように参照することもできます。 ユーザー定義の クラスの種類

Java には 7 種類のクラスがあります。

    静的クラス 最終クラス 抽象クラス コンクリートクラス シングルトンクラス POJOクラス 内部クラス
Javaのクラスの種類

静的クラス

Java の static はメモリ内のオブジェクトを管理するキーワードです。静的オブジェクトは、クラスのインスタンスではなく、クラスに属します。

クラスを作ることができます 静的 それがネストされたクラスである場合に限ります。静的クラスは入れ子クラスとも言えます。これは、別のクラス内で静的として宣言されたクラスが静的クラスとして知られることを意味します。ネストされた静的クラスは、外部クラスへの参照を必要としません。静的クラスの目的は、継承されたクラスの概要を提供することです。

静的クラスのプロパティは次のとおりです。

  • クラスには静的メンバーのみがあります。
  • 外部クラスのメンバー (非静的) にはアクセスできません。
  • 静的クラスのオブジェクトを作成することはできません。

プログラムを通して静的クラスの概念を理解しましょう。

StaticClassExample.java

 public class StaticClassExample { private static String str = 'Javatpoint'; //nested class which is a Static class public static class StaticDemo { //non-static method of Static class public void show() { System.out.println(str); } } public static void main(String args[]) { StaticClassExample.StaticDemo obj = new StaticClassExample.StaticDemo(); obj.show(); } }  

出力:

 Javatpoint  

上記のプログラムの外部クラスで、変数を宣言しました。 str 静的コンテキストからその変数にアクセスしているため、静的として扱われます。その変数を非静的として宣言すると、コンパイラはエラーを表示します。 ネストされた静的クラスは、外部クラスの非静的メンバーにアクセスできません。

上記のプログラムで 2 番目に注目すべきことは、ネストされたクラスのオブジェクトを作成するために、外側のクラスのインスタンスを作成する必要がないことです。ネストされたクラスが静的クラスではない場合は、外部クラスのインスタンスを作成する必要があります。

最終クラス

最終という言葉は、変更できないことを意味します。の 最後の Java のクラスは、次を使用して宣言できます。 最後のキーワード 。クラスを Final として宣言すると、値はプログラム全体で同じままになります。最後のクラスの目的は、クラスを作成することです。 不変 String クラスのように。これはクラスを不変にするための唯一の方法です。覚えておいてください。 最終クラスは拡張できません 。また クラスがサブクラス化されるのを防ぎます

最終クラスの概念をプログラムを通して理解しましょう。

FinalClassExample.java

 //base class declared as final final class A { void printmsg() { System.out.print('Base class method is executed.'); } } //derived class //extending a final class which is not possible //it shows the error cannot inherit final class at compile time class B extends A { void printmsg() { System.out.print('Derived class method is executed.'); } } //main class public class FinalClassExample { public static void main(String[] arg) { B obj = new B(); obj.printmsg(); } }  

出力:

 /FinalClassExample.java:11: error: cannot inherit from final A class B extends A  

抽象クラス

アン 抽象クラス キーワードで宣言された です 抽象的な 。クラスには抽象メソッドが含まれる場合と含まれない場合があります。抽象クラスのインスタンスを作成することはできませんが、サブクラスにすることはできます。これらのクラスは不完全であるため、抽象クラスを完成させるには、抽象クラスを具象クラスに拡張する必要があります。サブクラスを抽象として宣言する場合は、抽象メソッドの実装を提供する必要があります。したがって、サブクラスも抽象として宣言する必要があります。抽象クラスを使用することでデータの隠蔽を実現できます。抽象クラスの例は次のとおりです。 アブスタークトマップ Collections フレームワークの一部であるクラス。

プログラムを通して抽象クラスの概念を理解しましょう。

AbstractClassExample.java

 //abstract class abstract class MathematicalOperations { int a=30, b=40; //abstract method public abstract void add(); } public class Operation extends MathematicalOperations { //definition of abstract method public void add() { System.out.println('Sum of a and b is: 'a+b); } public static void main(String args[]) { MathematicalOperations obj = new Operation(); obj.add(); } }  

出力:

 Sum of a and b is: 70  

コンクリートクラス

これらは通常の Java クラスです。基本クラスにまだ実装されていないすべてのメソッドの基本実装を提供する派生クラスは、 コンクリート クラス。つまり、抽象クラスのすべてのメソッドが実装された通常の Java クラスです。具体的なクラスのオブジェクトを直接作成できます。具象クラスと抽象クラスは同じではないことに注意してください。具象クラスはその親クラスを拡張できます。特定の要件に使用されます。

具体的なクラスの概念をプログラムを通して理解しましょう。

ConcreteClassExample.java

 //Concrete Class public class ConcreteClassExample { //method of the concreted class static int product(int a, int b) { return a * b; } public static void main(String args[]) { //method calling int p = product(6, 8); System.out.println('Product of a and b is: ' + p); } }  

出力:

 Product of a and b is: 48  

シングルトンクラス

一度にオブジェクトのみを持つクラスは、 シングルトンクラス 。それでも、もう一度インスタンスを作成しようとすると、新しく作成されたインスタンスは最初のインスタンスを指します。インスタンスを通じてクラス内に変更を加えた場合、その変更は単一インスタンスの変数にも影響します。通常、データベース接続とソケット プログラミングを処理する際にアクセスを制御するために使用されます。シングルトン クラスを作成する場合は、次の手順を実行します。

  • プライベートを作成する コンストラクタ
  • シングルトン クラスのオブジェクトを返す静的メソッドを (遅延初期化を使用して) 作成します。

SingletonClassExample.java

 public class Singleton { private String objectState; private static Singleton instance = null; private Singleton() throws Exception { this.objectState = 'Javatpoint'; } public static Singleton getInstance() { if(instance==null) { try { instance=new Singleton(); } catch(Exception e) { e.printStackTrace(); } } return instance; } public String getObjectState() { return objectState; } public void setObjectState(String objectState) { this.objectState = objectState; } }  

出力:

 Javatpoint  

POJOクラス

Java では、POJO は プレーンな古い Java オブジェクト。 プライベート変数、セッターおよびゲッターのみを含む Java クラスは、 ポジョ クラス。これは、Java プログラムの再利用性と可読性を高める Java オブジェクトを定義するために使用されます。このクラスはカプセル化を提供します。これらのクラスは理解しやすいため、Java で広く使用されています。 POJO クラスには次のプロパティがあります。

  • 配列、HttpServlet などの事前定義クラスは拡張しません。
  • 事前に指定された注釈を含めることはできません。
  • 事前定義されたものを実装することはできません インターフェース
  • コンストラクターを追加する必要はありません。
  • すべてのインスタンス変数はプライベートである必要があります。
  • ゲッター/セッター メソッド 公開されている必要があります。

Javaプログラムを通してPOJOクラスの概念を理解しましょう。

PojoClassExample.java

 class PojoDemo { //private variable private double price=89764.34; //getter method public double getPrice() { return price; } //setter method public void setPrice(int price) { this.price = price; } } //main class public class PojoClassExample { public static void main(String args[]) { PojoDemo obj = new PojoDemo(); System.out.println('The price of an article is '+ obj.getPrice()+' Rs.'); } }  

出力:

 The price of an article is 89764.34 Rs.  

内部クラス

Java では、クラス内にクラスを定義することができ、そのようなクラスは次のように呼ばれます。 入れ子になったクラス 。クラスを論理的にグループ化し、目的を達成するために使用されます。 カプセル化 。外部クラスのメンバー (プライベートを含む) には、 内部クラス 。ネストされたクラスを宣言するための一般的な構文は次のとおりです。

 class OuterClass { //code class NestedClass { //code } }  

ネストされたクラスには 2 つのタイプがあります。

1. 静的ネストされたクラス: というクラス 静的 そして 入れ子になった は静的入れ子クラスと呼ばれます。これは、その外部クラスのインスタンス メンバーと対話します。次の構文を使用して、静的ネストされたクラスのオブジェクトを作成できます。

 OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();  

2. 非静的ネストされたクラス: 非静的ネストされたクラスが呼び出されます 内部クラス

静的ネストされたクラスと内部クラスを宣言するための一般的な構文は次のとおりです。

 class OuterClass { ... static class StaticNestedClass { ... } class InnerClass { ... } }  

Javaプログラムを通じて内部クラスの概念を理解しましょう。

InnerClassExample.java

 public class InnerClassExample { public static void main(String[] args) { System.out.println('This is outer class.'); } class InnerClass { public void printinner() { System.out.println('This is inner class.'); } } }  

内部クラスの種類

Java が提供する内部クラスは次の 2 種類です。

ローカル内部クラス

ブロック内で定義される内部クラスの一種です。ここで、 block はメソッド本体 (中括弧で囲まれたステートメントのグループ) を表します。ブロック内で定義するため、メソッド ローカル内部クラスとも呼ばれます。これらは、ブロックのインスタンス メンバーにアクセスできるため、非静的クラスです。メソッドの本体でローカルの内部クラスを定義できます。これらのクラスは、定義されているブロック内でインスタンス化する必要があります。

Java プログラム (内部クラスを含むプログラム) をコンパイルすると、コンパイラーは 2 つのクラス ファイルを生成します。 外部クラス そして 外側$1内側.クラス。 1 つは外部クラス用で、もう 1 つは外部クラスへの参照を含む内部クラス用です。

Java プログラムを通じてローカル内部クラスの概念を理解しましょう。

アウタークラス.java

 public class OuterClass { private void getValue() { //if you are using Java 7 make the variable final //if you are using Java 8 the code runs successfully int sum = 20; //declaring method local inner class class InnerClass { public int divisor; public int remainder; public InnerClass() { divisor = 4; remainder = sum%divisor; } private int getDivisor() { return divisor; } private int getRemainder() { return sum%divisor; } private int getQuotient() { System.out.println('We are inside the inner class'); return sum / divisor; } } //creating an instance of inner class InnerClass ic = new InnerClass(); System.out.println('Divisor = '+ ic.getDivisor()); System.out.println('Remainder = ' + ic.getRemainder()); System.out.println('Quotient = ' + ic.getQuotient()); } public static void main(String[] args) { //creating an instance of outer class OuterClass oc = new OuterClass(); oc.getValue(); } }  

出力:

 Divisor = 4 Remainder = 0 We are inside the inner class Quotient = 5  

匿名の内部クラス

これはローカル クラスと同じ内部クラスの一種ですが、唯一の違いは、クラスにはクラス名がなく、クラスから単一のオブジェクトが作成されることです。コードがより簡潔になります。ローカルクラスを一度使いたい場合に使用します。匿名クラスは次の 2 つの方法で作成できます。

  • インターフェースを使用することで
  • クラスを具体的および抽象的に宣言することによって

構文:

 // the class may an interface, abstract or concrete class DemoClass obj = new DemoClass() { //methods //data members public void demomethod() { //statements } };  

上記の構文を見ると、クラスの定義がブロックに含まれている点を除けば、コンストラクターの呼び出しと同じであることがわかります。

AnonymousClassExample.java

 interface Score { int run = 321; void getScore(); } public class AnonymousClassExample { public static void main(String[] args) { // Myclass is hidden inner class of Score interface // whose name is not written but an object to it // is created. Score s = new Score() { @Override public void getScore() { //prints score System.out.print('Score is '+run); } }; s.getScore(); } }  

出力:

 Score is 321  

Java は、ラッパー クラスと呼ばれる別のタイプの Java クラスも提供します。詳しく説明しましょう。

ラッパークラス

Java では、この用語は ラッパークラス Java のプリミティブ型をオブジェクト化した Java クラスのコレクションを表します。これは、各プリミティブ型に対応するラッパー クラスがあることを意味します。ラッパー クラスは、プリミティブ型からオブジェクトへの変換、またはその逆の変換を実行するために使用されます。次の図は、ラッパー クラスの階層を示しています。

Javaのクラスの種類

次の表は、プリミティブ型と対応するラッパー クラスを表しています。

プリミティブ型 ラッパークラス
ブール値 ブール値
整数 整数
チャー キャラクター
ダブル ダブル
浮く 浮く
長さ 長さ
バイト バイト
短い 短い

Java プログラムを通してラッパー クラスを理解しましょう。

WrapperClassExample.java

 public class WrapperClassExample { public static void main(String args[]) { byte x = 0; //wrapping byte primitive type into Byte object Byte byteobj = new Byte(x); int y = 23; //wrapping int primitive type into Integer object Integer intobj = new Integer(y); char c='m'; //wrapping char primitive type into Character object Character charobj=c; //printing values from objects System.out.println('Byte object byteobj: ' + byteobj); System.out.println('Integer object intobj: ' + intobj); System.out.println('Character object charobj: ' + charobj); } }  

出力:

 Byte object byteobj: 0 Integer object intobj: 23 Character object charobj: m