1.オブジェクト指向の考え方
オブジェクト指向はJava言語のコアコンテンツです。オブジェクト指向に慣れていない初心者の多くは混乱しています。クラスとは何ですか。オブジェクトとは何ですか?彼らの関係はどのようなものですか?質問が出るのを待ってください。今日は、私自身のオブジェクト指向の学習と共有をすべての人のために行います。
オブジェクト指向を学ぶ前に、写真をお見せします。
この写真を見ると、見るのは難しくありません。最初のブロック図は、クラスに上がって車に乗るまでのすべてのステップで非常に具体的です。2番目のブロック図は、洗濯機に服を入れて、洗ったら取り出すだけです。次に、最初のブロック図を「プロセス指向」と見なすことができ、2番目のブロック図は今日の主人公である「オブジェクト指向」です。
では、2つの違いは何ですか?
プロセス指向の考え方:私たちは、問題解決プロセスに焦点を当て、物事を行うすべてのステップに参加しています。
オブジェクト指向の考え方:最終結果のみに焦点を当てます。
2.オブジェクト指向の機能
1.人間の問題に対する考え方に沿ったもの
2.イベントの実行者から発信者に変更する
3.問題を単純化する
3.クラスとオブジェクト
次に、クラスとオブジェクトを紹介します。
クラス:同じ属性と動作を持つもののクラスはクラスと呼ばれます。クラスは抽象的で、目に見えず、無形です。
オブジェクト:すべてがオブジェクトであり、目に見えて具体的です。
クラスとオブジェクトの関係:オブジェクトはクラスの特定の記述であり、クラスはオブジェクトの抽象化です。
例を挙げましょう。
学生はクラスであり、オブジェクトは特定の学生です。
私が今言うなら:学生が出てきます、誰かが同意しますか?
しかし、私が言うならば:学生の張さんが出てきたら、張さんは彼が彼を呼んでいることを知るでしょう。
属性:物が持っている情報を説明してください。
行動:物事ができること。
注: javaでは、クラスが最も基本的な単位であるため、クラスを使用して物事を記述することを学ぶ必要があります。
モノ→クラス
属性→メンバー変数の
動作→メンバーメソッド
4.オブジェクト指向の開発設計と特性
開発:常にオブジェクトを作成し、オブジェクトを使用し、オブジェクトの
設計を変更します:オブジェクト間の関係を管理および維持します。優れたオブジェクト設計により、プログラムが簡素化され、保守が容易になり
ます。機能:カプセル化、継承、多態性
5.例:象を冷蔵庫に入れます
次に、オブジェクト指向の考え方を使用して分析しましょう
。1。クラスとは何ですか。
カテゴリ:象、冷蔵庫、OOPDemo
2.各カテゴリにはどのような動作(方法)がありますか
象:草を食べる、歩く
冷蔵庫:ドアを開閉する
OOPDemo:象をロードする方法メイン
3.クラスとクラスソースコードの表示とエレファントクラスの関係は何ですか:
冷蔵庫のカテゴリ:
OOPDemo:
ここでは、理解を容易にするために、オブジェクト指向とプロセス指向の2つの方法を使用しました。
結果は次のとおりです。
ご覧のとおり、プロセス指向とオブジェクト指向は同じ結果を生成するので、誰かが尋ねます。同じ結果を生成しても、オブジェクト指向はなぜですか?
言い方を変えれば、今は象のふりをしているだけなので、サル、子犬、虎などのふりをする場合は、何度も印刷しますか?事前にオブジェクト指向の考え方でクラスを設定しており、何をインストールしても直接呼び出すことができるので便利ですね!
6.クラスの使用
6.1クラス定義:
//我们创建一个学生类
public class Student{
//成员变量
String name
int age
//构造方法
//成员方法
}
6.2クラスの呼び出し:
Student tom = new Student();//实例化语法
Student tom = new Student("tom",20);
//调用类中的属性:
tom.name
tom.age
//调用类中的方法:
tom.getAge(20);
6.3工法:
public Student(){
//无参构造方法
}
//构造有参方法
public Student(String name, int age){
//this后续我会讲解,大家先不用注意
this.name = name;
this.age = age;
}
注:
1。コンストラクターの名前とタイプは一貫して
いる必要があります。2。訪問者は存在しません。3
。パラメーター化された構築メソッドがクラスで定義されている場合、非表示の非パラメーター構築は存在しません。現時点では、非パラメータ構築メソッドの定義を表示することをお勧めします
。4。各クラスには構築メソッドがあります。構築メソッドがクラスに対して明示的に定義されていない場合、Javaコンパイラはクラスのデフォルトの暗黙的な非パラメータ構築メソッドを提供します。メソッド
5.クラスのオブジェクトを作成するときは、少なくとも1つの構築メソッドを呼び出す必要があります。
6.クラスには複数の構築メソッドが存在する可能性があり、それらはオーバーロード、つまり構築メソッドのオーバーロードを構成します。
7.これの使用法
this:現在のクラスのオブジェクトの
使用法を
表します:1。同じ名前のメンバー変数とローカル変数を区別するために使用されます
。2 。現在のクラスのコンストラクターを呼び出すことができます。構文:this([parameter list]);パラメーターを渡さずに、現在のクラスのパラメーターなしの構築メソッドを呼び出します。逆に、パラメーターリストに一致するパラメーター構築メソッドを呼び出します。注:この呼び出しステートメントは、メソッド本体の最初のステートメントである必要があります。
3.メンバー属性を呼び出すことができます:this。メンバー属性名
4.メンバーメソッドを呼び出すことができます:this。メンバーメソッド名([パラメーターリスト]);
これのコードデモンストレーション:
//this关键字的应用:
//1.调用当前类的属性(区分成员变量和局部变量同名赋值问题)
//2.调用当前类的方法
//3.调用当前类的其他构造方法
//
//
//注意:this关键字访问类的成员方法时不受访问权限的控制,可以访问本类中所有的成员变量和成员方法,包括private 的成员变量和成员方法
public class Person
String name;
int age;
//显示无参构造方法
public Person(){
this("tom",20);
}
//定义有参构造
public Person(String name){
this.name = name;
public Person(String name,int age){
this(name);
this.age = age;
}
public void setName(String name){
this.name = name;
}
public void testMethod(String name){
this.setName(name);//通过this调用了当前类中的其他方法
System.out.println(this.name);
}
public static void main(String[] args) {
Person person = new Person();
System.out.println("___________this调用本类属性________________");
person.setName("tom");
System.out.println("name1"+person.name);
System.out.println("___________this调用本类方法________________");
person.testMethod("lili");
System.out.println("___________this调用本类构造方法_____________");
Person person1 = new Person("tom",30);
System.out.println(person.name);
System.out.println(person.age);
}
}
8.クラスアプリケーションコード:
次に、クラスのアプリケーションコードを示します。学生クラスを定義し、学生テストクラスを定義してから、学生クラスからプロパティとメソッドを呼び出します。
//我们定义一个学生类
Public class Student{
String name;
int age;
String email;
//显示定义无参方法
public Student(){
}
//定义构造有参方法
public Student(String name ,int age, String email){
this.name = name;
this.age = age;
this.email = email;
}
//成员方法
//获取姓名
public String getName(){
return name;
}
public void setName(){
this.name = name;
}
public int getAge(int age){
if(age>0 &&age<18){
this.age = 18;
}else{
this.age = age;
}
return this.age;
}
}
//学生类的测试类
//需求:调用学生类中的成员属性和方法
public class StudentTest{
public static void main(String[] args ){
//实例化Student中的对象
Student tom = new Student();
//调用属性:对象名.属性名
tom.name = "tom ford";
tom.age = 20;
tom.email = "[email protected]"
System.out.println("姓名:"+tom.name);
System.out.println("年龄:"+tom.age);
System.out.println("邮箱:"+tom.email);
System.out.println("_________________________________________________________");
//如果上述Student中属性过多,则这种方法很慢,很麻烦。
//通过有参构造一次性构造
Student tom = new student("tom",20,"[email protected]");
System.out.println("姓名:"+tom.name);
System.out.println("年龄:"+tom.age);
System.out.println("邮箱:"+tom.email);
System.out.println("_________________________________________________________");
//调用方法:对象名.方法名()
int tomAge = tom.getAge(20);
System.out.println("tomAge:"+tomAge);
System.out.println("姓名:"+tom.getName());
tom.name =("dd");
System.out.println("name:"+tom.getName());
}
}
9.クラスには次の変数が存在する可能性があります
クラス変数:クラス内、メソッド外に存在し、宣言の前にstaticキーワードを追加する必要があります:例:static intフラグ;クラスのロード時に生成;
メンバー変数:
ローカル変数:
ローカル変数とメンバー変数の違い:
1 。宣言の場所が異なります。
メンバー変数(インスタンス変数):クラス内、メソッド外。
ローカル変数:メソッド本体内またはメソッド宣言上
。2。メモリ内の格納場所が異なります。
メンバー変数:ヒープメモリ内。
ローカル変数:スタックの内層内。
3.ライフサイクルが異なります。
メンバー変数:オブジェクトが生成されると生成され、オブジェクトが
終了すると終了します。ローカル変数:メソッドが呼び出されると生成され、メソッドが呼び出されると終了します
。4。異なる初期状態の
メンバー変数:はいデフォルトの初期化値
ローカル変数:デフォルトの初期化値はありません。手動で初期化した後に使用できます。
5.実行優先度
メンバー変数とローカル変数の名前が同じ場合、呼び出し時に「近接原理」が採用されます。