オブジェクト指向の基礎
1.列挙
1.1JDK1.5より前
JDK1.5より前の列挙型クラスを宣言するにはどうすればよいですか?
- 建設業者と民間民営化
- このクラス内に定数オブジェクトのセットを作成し、パブリック静的修飾子を追加して、これらの定数オブジェクトを外部に公開します
1.2JDK1.5以降
構文形式:
修饰符】 enum 枚举类名{
常量对象列表
}
【修饰符】 enum 枚举类名{
常量对象列表;
其他成员列表;
}
サンプルコード:
public class TestEnum {
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring);
}
}
enum Season{
SPRING,SUMMER,AUTUMN,WINTER
}
列挙型クラスの要件と特性:
- 列挙型クラスの定数オブジェクトのリストは、列挙型クラスの最初の行にある必要があります。これは定数であるため、大文字にすることをお勧めします。
- 定数オブジェクトリストの背後に他のコードがない場合は、「;」を省略できます。それ以外の場合は、「;」を省略できません。
- コンパイラは、デフォルトで列挙型クラスのプライベートパラメータレス構造を提供します。列挙クラスにパラメータレス構造が必要な場合は、宣言する必要はなく、定数オブジェクトリストを作成するときにパラメータを追加する必要もありません。
- 列挙型にパラメーター化された構造体が必要な場合は、プライベートのパラメーター化された構造体を手動で定義する必要があります。パラメーター化された構造体を呼び出す方法は、定数オブジェクト名の後に(引数リスト)を追加することです。
- 列挙型クラスはデフォルトでjava.lang.Enumクラスを継承するため、他の型を継承できなくなります。
- JDK1.5以降、switchは列挙型のサポートを提供し、列挙型定数名は大文字と小文字を区別せずに書き込むことができます。
- 列挙型に他のプロパティがある場合、定数オブジェクトは論理的な意味で不変である必要があるため、これらのプロパティもfinalとして宣言することをお勧めします(必須ではありません)。
1.3列挙型の一般的に使用される方法
1.toString(): 默认返回的是常量名(对象名),可以继续手动重写该方法!
2.name():返回的是常量名(对象名) 【很少使用】
3.ordinal():返回常量的次序号,默认从0开始
4.values():返回该枚举类的所有的常量对象,返回类型是当前枚举的数组类型,是一个静态方法
5.valueOf(String name):根据枚举常量对象名称获取枚举对象
2.パッケージング
2.1パッケージング
Javaには、基本型と参照型の2つの型システムがあります。基本型の使用は効率にあります。ただし、オブジェクト専用に設計されたAPIまたは新機能(ジェネリックなど)を使用する場合は、基本データ型のデータが必要です。パッケージングクラスを使用するにはパックに来てください。
2.2梱包と開梱
パッキング:基本的なデータ型をパッケージ化オブジェクトに変換します。
パッケージングクラスの目的は、オブジェクト用に特別に設計されたAPIと機能を使用することです。
開封:パッケージオブジェクトを基本的なデータ型に開梱します。
基本的なデータ型への変換は、通常、操作の必要性によるものです。Javaのほとんどの演算子は、基本的なデータ型用に設計されています。比較、算術など。
基本値---->パッケージオブジェクト
Integer i1 = new Integer(4);//使用构造函数函数
Integer i2 = Integer.valueOf(4);//使用包装类中的valueOf方法
パッケージオブジェクト---->基本値
Integer i1 = new Integer(4);
int num1 = i1.intValue();
JDK1.5以降、ボックス化とボックス化解除を自動化できます。
注:自動ボックス化とボックス化解除は、自分に対応するタイプ間でのみ実現できます。
3.パッケージングクラスのいくつかのAPI
3.1基本的なデータ型と文字列間の変換
(1)基本データ型を文字列に変換します
int a = 10;
//String str = a;//错误的
//方式一:
String str = a + "";
//方式二:
String str = String.valueOf(a);
(2)文字列を基本データ型に変換します。文字列を
対応する基本型に変換します。Characterクラスを除き、他のすべてのパッケージクラスには、文字列パラメータを対応する基本型に変換するparseXxx静的メソッドがあります。
4.インターフェース
インターフェースは仕様であり、一連のルールを定義します。これは、現実の世界で「もしあなたが/したいのなら...あなたはできるはずです...」という考えを具体化したものです。継承は「正しい」という関係であり、インターフェースの実装は「できる」という関係です。
4.1フォーマットの定義
同様の方法でクラスを定義したが、interface
キーワードを使用するインターフェースの定義。また、.classファイルにコンパイルされますが、クラスではなく、別の参照データ型であることを明確にする必要があります。
引用数据类型:数组,类,接口。
4.2インターフェース宣言フォーマット
【修饰符】 interface 接口名{
//接口的成员列表:
// 静态常量
// 抽象方法
// 默认方法
// 静态方法
// 私有方法
}
サンプルコード:
interface Usb3{
//静态常量
long MAX_SPEED = 500*1024*1024;//500MB/s
//抽象方法
void read();
void write();
//默认方法
public default void start(){
System.out.println("开始");
}
public default void stop(){
System.out.println("结束");
}
//静态方法
public static void show(){
System.out.println("USB 3.0可以同步全速地进行读写操作");
}
}
4.3インターフェースのメンバーの説明
インターフェースは、複数のクラスに共通の共通の行動規範を定義します。これらの行動規範は、外部との通信のためのチャネルです。つまり、通常、一連のパブリックメソッドがインターフェースで定義されます。
JDK8より前は、インターフェースにのみ表示できました。
(1)パブリック静的定数:パブリック静的ファイナルは省略できます
(2)パブリック抽象メソッド:パブリック抽象は省略できます
理解:インターフェースは、複数の同様のクラスから抽象化された仕様であり、特定の実装を提供する必要はありません。
JDK1.8では、デフォルトのメソッドと静的メソッドをインターフェイスで宣言できます。
(3)パブリックデフォルトメソッド:パブリックは省略可能、保持することをお勧めしますが、デフォルトは省略できません
(4)パブリック静的メソッド:パブリックは省略可能、保持することをお勧めしますが
、JDK1.9では静的を省略できません、インターフェイス追加:
(5)プライベートメソッド
さらに、初期化する必要のあるメンバー変数がインターフェイスにないため、インターフェイスに他のメンバー、コンストラクター、初期化ブロックを含めることはできません。
4.4インターフェースの実装
インターフェイスを使用すると、オブジェクトを作成することはできませんが、実装することはできます(implements
継承と同様)。
クラスとインターフェースの関係は実現関係です。つまり、クラスはインターフェースを実装します。このクラスは、インターフェースの実現クラスまたはインターフェースのサブクラスと呼ぶことができます。実装された動作は同様の継承であり、形式は類似していますが、キーワードを使用して実装された異なるimplements
キーワードです。
4.5インターフェース構文フォーマットの実装
【修饰符】 class 实现类 implements 接口{
// 重写接口中抽象方法【必须】,当然如果实现类是抽象类,那么可以不重写
// 重写接口中默认方法【可选】
}
【修饰符】 class 实现类 extends 父类 implements 接口{
// 重写接口中抽象方法【必须】,当然如果实现类是抽象类,那么可以不重写
// 重写接口中默认方法【可选】
}
4.5対応するメソッドの呼び出し方法
- インターフェイスの静的メソッドの場合、「インターフェイス名」を直接使用して呼び出すことができます。
- 「インターフェース名」のみを使用して呼び出すことができ、実装クラスのオブジェクトを介して使用することはできません。
- インターフェイスの抽象メソッドとデフォルトメソッドは、クラスオブジェクトを実装することによってのみ呼び出すことができます
- インターフェイスはオブジェクトを直接作成できません。実装クラスのオブジェクトのみを作成できます
4.5インターフェースの複数の実装
以前に学んだように、継承システムでは、クラスは1つの親クラスしか継承できません。インターフェイスの場合、クラスは複数のインターフェイスを実装できます。これは、インターフェイスの複数の実装と呼ばれます。さらに、クラスは親クラスから継承し、同時に複数のインターフェースを実装できます。
4.6デフォルトのメソッド競合の問題
- パパの第一原理
- 選択する必要があります
4.7インターフェースの多重継承
インターフェイスは、他のインターフェイスまたは複数のインターフェイスをextends
継承できます。インターフェイス継承はキーワードを使用し、親子はインターフェイスにインターフェイスを継承します。
4.8インターフェースと実装クラスオブジェクトのポリモーフィック参照
実装クラスは、親クラスを継承するサブクラスと同様に、インターフェイスを実装します。したがって、インターフェイスタイプの変数と実装クラスのオブジェクトも、ポリモーフィック参照を構成できます。インターフェイスタイプの変数を介してメソッドを呼び出します。最終的な実行は、新しい実装クラスオブジェクトによって実装されたメソッド本体です。
public class TestInterface {
public static void main(String[] args) {
Flyable b = new Bird();
b.fly();
Flyable k = new Kite();
k.fly();
}
}
interface Flyable{
//抽象方法
void fly();
}
class Bird implements Flyable{
@Override
public void fly() {
System.out.println("展翅高飞");
}
}
class Kite implements Flyable{
@Override
public void fly() {
System.out.println("别拽我,我要飞");
}
}
5.インナークラス
5.1概要
1.内部クラスとは何ですか?
別のクラスBでクラスAを定義します。内部のクラスAは内部クラスと呼ばれ、Bは外部クラスと呼ばれます。
2.なぜ内部クラスを宣言するのですか?
記述に完全な構造を必要とするものの一部があり、この完全な内部構造は外部のものにのみサービスを提供し、他の場所で単独で使用されない場合、内部の完全な構造全体が内部クラスを使用するのが最適です。
また、内部クラスは外部クラス内にあるため、外部クラスのプライベートメンバーに直接アクセスできます。
3.内部クラスの形式は何ですか?
内部クラス宣言の位置(変数の分類など)に応じて、次のように分類できます。
(1)メンバー内部クラス:
- 静的メンバーの内部クラス
- 非静的メンバーの内部クラス
(2)ローカル内部クラス
- 名前付きローカル内部クラス
- 匿名の内部クラス
6.注釈
6.1コメントとは
注釈は「@注釈名」としてコードに存在し、次のようないくつかのパラメーター値を追加することもできます
@SuppressWarnings(value=”unchecked”)
@Override
@Deprecated
@Test
@author
@param
....
注釈注釈は*** JDK5.0 ***から導入されました。
コメントも一種のコメントですが、プログラムの元のロジックは変更されませんが、プログラムに注釈情報が追加されるためです。ただし、単一行コメントや複数行コメントとは異なります。単一行コメントや複数行コメントの場合は、プログラマーが確認できます。コメントは、コンパイラーや他のプログラムが読み取ることができる一種のコメントです。 。プログラムは、さまざまなコメントに基づくこともできます。、対応する処理を行います。したがって、注釈は、ツールが注釈を処理できるようにコードに挿入されるタグです。
完全なコメントには3つの部分があります。
- 注釈付き宣言:クラス、メソッド、変数などと同様に、使用する前に宣言する必要があります
- 注釈の使用:パッケージ、クラス、メソッド、属性、構造、ローカル変数などの上の10個の位置の1つ以上に注釈を付けるために使用されます。
- 注釈の読み取り:これらの使用済み注釈の読み取り専用のセクションがあり、注釈情報に従って対応する処理が行われます。この手順は注釈処理フローと呼ばれ、注釈と通常の注釈の最大の違いでもあります。
6.2システムによって事前定義された3つの最も基本的な注釈
1、@ Override
変更されたメソッドが効果的な書き換えメソッドであることを検出するために使用されます。そうでない場合は、コンパイルエラーが報告されます。
メソッドにのみマークを付けることができます。
コンパイラプログラムによって読み取られます。
2、@非推奨
マークされたデータが古く、推奨されていないことを示すために使用されます。
属性、メソッド、構造、クラス、パッケージ、ローカル変数、およびパラメーターを変更するために使用できます。
コンパイラプログラムによって読み取られます。
3、@ SuppressWarnings
コンパイルの警告を抑制します。
クラス、属性、メソッド、構造、ローカル変数、およびパラメーターを変更するために使用できます
コンパイラプログラムによって読み取られます。