1. オブジェクト指向とは何ですか?
オブジェクト指向 (OO) は、一般的なプログラム構造の設計方法です。
オブジェクト指向の考え方の基礎は、関連するデータとメソッドをまとめて新しい複合データ型に結合し、新しく作成した複合データ型をプロジェクトの基礎として使用することです。
オブジェクト指向は非常に抽象的な概念であり、プロセス指向に関連しています。
プロセスとオブジェクトはどちらも問題を解決するためのアイデアです。
プロセス指向: 機能的な動作、プロセス、最初に何を行うか、次に何を行うかを強調します;
オブジェクト指向: 関数をオブジェクトにカプセル化し、特定の関数オブジェクトを持つオブジェクトを強調します。
オブジェクト指向の考え方によれば、あらゆるものをオブジェクトとみなすことができます。
オブジェクト指向の 3 つの特徴:
Encapsulation (カプセル化)、
Inheritance (継承)、
Polymorphism ( ポリモーフィズム)。
私の要約:
プロセス指向: 特定の関数の実装を強調する; (実行者)
オブジェクト指向: 機能的な機能を強調する物体。 (マネージャー)
2. クラス
クラス (クラス) は、Java 言語の最小のプログラミング単位であり、Java プログラムを設計および実装するための基礎です。クラスの関連知識を紹介します。
クラスの概念
クラスは、物事のグループに共通の特性と機能を記述したものです。クラスとは、物事の集まりを全体的に記述したもので、オブジェクト指向技術で設計する際の最小単位であり、プロジェクトを構成する最も基本的なモジュールです。クラスの概念は抽象的で、建築設計における図面に似ており、実際に表現する必要がある特定の内容を抽象化したものです。クラスには骨格構造のみが含まれ、特定のデータは含まれません。したがって、クラスは特定の個人ではなく全体を表します。
私の要約: クラスは抽象であり、オブジェクトは具体的で現実的です。
クラスの定義:
[修飾子] class クラス名 {
1~n 個の構築メソッド;
0~n 個のフィールド;
0~n メソッド
}
クラスを定義します。実際にはクラス内のオブジェクトを定義します。
オブジェクトには次のものが含まれます。
State; (属性)
関数、動作; (メソッド)
クラスを通じてオブジェクトを記述する;
状態--------メンバー変数;
機能、動作 - メソッド;
Eg:
class Person{ //属性 private String name; private int age; private int sal; //方法 public void show(){ System.out.println("个人情况:"+name+age+sal); } }
3. 構築メソッド
構築メソッド: を使用します。クラスのインスタンスを構築するには (各クラスにはデフォルトでパラメーターのないコンストラクターがあり、new で呼び出す必要があります)
フィールド: クラスまたはオブジェクトに含まれるデータ、クラスの状態の説明
メソッド: クラスまたはオブジェクトの特性または動作
関数:
クラス内のフィールドを初期化し、オブジェクトの作成に使用できます。
特徴:
メソッド名はクラス名と同じです
戻り値の型を定義する必要はありません
リターンを書く必要はありませんステートメント
# #Note:
デフォルトの構築方法の特徴。 複数のコンストラクターがオーバーロードの形式で存在します。 コンストラクター メソッドのオーバーロード: (必要なものを適応させ、必要なものを呼び出します) this([実際のパラメーター]); 現在のクラスのコンストラクター メソッドを呼び出します
注: this([実際のパラメータ]); はコンストラクターの最初の行に配置する必要があります;
オブジェクト生成形式:
クラス名 オブジェクト名 = new クラス名 ();()があるのでメソッドですが、実際にはコンストラクタであり、非プライベートコンストラクタです。 例:CellPhone cp = new CellPhone();
Eg: class Person{ private String name; private int age; private int sal; public void show(){ System.out.println("个人情况:"+name+age+sal); } public Person(String name) { super(); this.name = name; } public Person(String name, int age) { super(); this.name = name; this.age = age; } public Person(String name, int age, int sal) { super(); this.name = name; this.age = age; this.sal = sal; } }
4. 静的キーワード
機能:
クラスがロードされるときにロードされます
オブジェクトの存在を優先します
すべてのオブジェクトによって所有されます共有
クラス名で直接呼び出すことができます
使用上の注意:
静的メソッドは静的メンバーのみにアクセスできます
ただし、非静的メンバー メソッドは静的メンバーにアクセスできます。
これは静的メソッドと super キーワードでは使用できません
メイン メソッド (main) は静的です (クラス名を使用して static main メソッドを呼び出すのは正常です! しかし、無限ループに陥り、メモリ オーバーフローが発生し、JVM が自動的に停止します!)
public static void main(String[] agrs){}
フィールドとメソッドを変更できます。
静的に変更されたメンバーは、クラスの単一のインスタンスではなく、このクラスに属していることを示します。
# STATIC 変更されたフィールド == クラス フィールド
STATIC 変更されたメソッド == クラス メソッド
不正なフィールド変更されたフィールドとメソッド。メンバーはクラスの単一のインスタンスに属します。クラスに属していません。
静的変更フィールドはありません == フィールド例
静的修飾子メソッドはありません == インスタンス メソッド
#Q およびメソッドの構文:
###アクセス クラス メンバー: Class.Field Class.Method ######インスタンス メンバーへのアクセス: Instance.Field Instance.Method#########私のまとめ# ##: ######static によって変更されたフィールドとメソッドは、クラスまたはインスタンスから呼び出すことができます; ######静的変更のないフィールドとメソッドは、インスタンスによってのみ呼び出すことができます (推奨: 呼び出すクラス名を使用します。実際、最下位レベルでは、オブジェクトがクラス メンバーを呼び出すと、クラス名の呼び出しも行われます) ######static キーワードは this と super と同時に使用できません。 ################5. 匿名オブジェクト#########名前のないオブジェクトが作成され、変数には割り当てられません。# ### ########### 機能: ######メソッドまたはフィールドが 1 回だけ呼び出される場合、####### は実際のパラメータとして渡すことができます。 ##### #Onlyヒープ内のストレージ領域を開きます。######### は 1 回のみ使用でき、使用後に破棄されます。#########いつ使用する必要がありますか?使うのは一度だけ! ! ######new Person(); は匿名オブジェクト、つまり名前のないオブジェクトを表します###new Person().age = 17;//使用一次之后就被销毁了
6、this关键字
特点:this表示当前对象。
当前对象 ←→ 当前正在调用实例成员的对象
换言之:谁调用了方法,谁就是当前对象。
什么时候使用this关键字呢?
方法间的相互调用;
this.字段;
构造器中相互调用,但是此时this([参数])必须写在构造方法第一行。
this不能用在static修饰的方法里和static修饰的代码块里;
Eg:构造方法中的this.name = name;
7、面向对象之封装
封装的两个含义:
1.把对象的状态和行为看成一个统一的整体,将二者存放在一个独立的模块中(类);
2."信息隐藏", 把不需要让外界知道的信息隐藏起来,尽可能隐藏对象功能实现细节,字段;
封装机制在程序中的体现是:
把描述对象的状态用字段表示,描述对象的行为用方法表示,把字段和方法定义在一个类中,并保证外界不能任意更改其内部的字段值,也不允许任意调动其内部的功能方法。
程序中的一种体现:
通常将类中的成员变量私有化(private),通过对外提供方法(setXxx,getXxx),可对该变量(xxx)进行访问。
boolean 类型的变量没有getXX,只有 isXX;
Eg: class Person1{ private String name; private int age; private int sal; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
8、访问修饰符
private 类访问权限:本类内部可以访问,不能继承到子类;
default 什么都不写,包访问权限:本类内部可以访问,同包其他类也可以访问,同包可继承;
protected 子类访问权限:本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问,能继承到子类;
public 公共访问权限:任何地方都可以访问,能继承到子类;
总结:
9. クラス設計分析
分析のアイデア:
以下に従ってクラスを作成します。要件 含まれるフィールド;
すべてのフィールドはプライベート化する必要があります;
カプセル化されたフィールドは、セッターとゲッターを通じて設定および取得できます;
必要に応じていくつかのフィールドを追加できます コンストラクター メソッド;
要件に応じて対応するメソッドを追加できます;
クラス内のすべてのメソッドは直接処理 (出力および印刷) する必要はなく、呼び出し元に処理を任せる必要があります。
10. オブジェクト指向の継承
まず、一般的なものの特性を反映するクラスがあり、次にこれに基づいて、特別なものを反映します;
つまり、継承は一般から特殊への関係です;
特徴:
1. コードの再利用性が向上しました。
2. クラス間の関係を作成する この継承関係によってのみポリモーフィズムの特性を得ることができます。
3. Java 言語は単一継承のみをサポートします (C 言語とは異なります)。
多重継承はセキュリティ リスクをもたらしやすいためです (親クラスが多すぎて関数が同じ場合、呼び出しに不確実性が生じますか? メソッドを上書きする場合、誰がそれをオーバーライドするのでしょうか?)。
ps: インターフェースは多重継承を実現できます
4. Java は多層継承をサポートしており、オブジェクトは各クラスのスーパークラスであり、ツリー構造を実装しています。
私の要約:
継承はポリモーフィズムの前提条件です。
クラスの場合、単一継承のみがサポートされます。
形式:
[修飾子] class SubClass extends SuperClass
この関係によれば、SuperClassクラスは親クラスまたは基本クラスと呼ばれ、サブクラスはサブクラスまたは派生クラスまたは拡張クラスと呼ばれます;
私の要約:
java.lang.Objectすべてのクラスの親クラスです。
オブジェクトは、直接の親クラスまたは間接的な親クラスのいずれかです。
例:
学生は人間の特殊な状況に属しますが、このとき学生に共通の特徴を持たせるために、人物クラスに人に共通する特徴を書きます(教師など他の人にもこれらの共通点がある可能性があります)、次に、生徒に「人物」カテゴリを展開するように指示します。
私の要約:
サブクラスと親クラスの関係:
サブクラスは親クラスを拡張します (サブクラスは親クラスの特殊なケースです)
主に親クラスに基づいて、独自のフィールドとメソッドを追加します。
親クラスのプライベート メンバーはサブクラスに継承できません;
親クラスの構築メソッドは継承できません;
Java は単一の継承のみをサポートし、複数の継承はサポートしません。継承;/ /そうでないと、たとえば show メソッドが複数のメソッドを継承している場合、どれを呼び出せばよいかわかりません。
クラスには直接の親クラスが 1 つだけあります;
クラスが別のクラスを明示的に継承しない場合、デフォルトの直接の親クラスはオブジェクト クラスです;
Student の直接の親クラスは Person で、Object クラスも Student クラスの親クラスですが、これは間接的な親クラスです。
クラスが別のクラスを明示的に継承すると、デフォルトの直接の親クラスは Object になります。キャンセルされます;
#Java のクラスは直接の親クラスを 1 つだけ持つことができます;java.lang.Object はすべてのクラスの親クラスであり、Object は直接の親クラスまたは間接的な親クラスのいずれかです。
サブクラス オブジェクトのインスタンス化プロセス
継承操作でのサブクラス オブジェクトのインスタンス化の場合:
サブクラス オブジェクトは、インスタンス化のコンストラクターの前にまず親クラスを呼び出す必要があります。独自のコンストラクターを呼び出します。
上記は本記事の内容の一部ですが、今後もオブジェクト指向の知識を皆様にわかりやすく整理していきます。間違っている点があればご指摘ください、ありがとうございます!
その他の関連する質問については、PHP 中国語 Web サイトをご覧ください: JAVA ビデオ チュートリアル
以上がJava - オブジェクト指向の詳細な入門 (1)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。