カプセル化
Javaでのカプセル化は、オブジェクトのプロパティをプライベート化すると同時に、外部との対話を要求するためのいくつかのインターフェース(メソッド)を外部に提供することです。
簡単に言うと、クラスの属性のアクセス許可はprivateに設定されており、ビジネスニーズに応じて、外部呼び出しのパブリックアクセス許可(getメソッドまたはsetメソッドまたはその他のメソッド)をメソッドに提供します。
もちろん、この原則は教義ではありません。一部のビジネス要件では、属性のアクセス許可をパブリックに設定する方が簡単です。しかし、私はまだ上記の原則を支持します。
言うまでもなく、栗をあげる
//我们使用两种不同的方式来实现一个Person类
//1.将类中的属性设置为private,暴露set方法和get方法给外界
public class Person {
/*
* 对属性的封装
* 一个人的姓名、性别、年龄都是这个人的私有属性
*/
private String name ;
private String sex ;
private int age ;
/*
* setter()、getter()是该对象对外开发的接口
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
}
//2.将类中的属性设置为public,外界直接调用属性来操作该类
public class Person {
public String name ;
public String sex ;
public int age ;
}
上記のどちらが良いか悪いですか?実際にはわかりにくいです。コードの量と読みやすいかどうかを考慮すると、2番目の方法が適切な方法です。しかし、拡張のしやすさを考えると、最初の方法が最適な解決策です。その理由は、方法があり、方法があるので論理的な判断ができるからです。たとえば、setAgaメソッドで外界の割り当てを論理的に判断できます。200歳の人を見たことがありますか。最初の方法を使用する場合は、直接割り当てるだけです。将来、データベースからデータを維持またはプルする場合、このデータは非常に奇妙になります。これは正しいか間違っていますか?データベースに問題がありますか、それとも原因ですか?異常なネットワークによって?たくさんの質問を待ちます。
public void setAge(int age) {
if(age > 200){
System.out.println("ERROR:error age input...."); //提示錯誤信息
}else{
this.age = age;
}
}
したがって、これが、クラスを実装するために2番目の方法を使用することを好む主な理由でもあります。
継承
継承は「is-a」関係を表します。2つのオブジェクトAとBがあり、「A is B」と記述できる場合は、AがBを継承することを意味します。ここで、Bは継承者によって親クラスと呼ばれます。 、Aは後継者によってサブクラスと呼ばれます。
実際、継承者は継承されたものの特殊化であり、継承されたものの特性に加えて、独自の特性も持っています。同時に、継承関係では、継承者は継承されたものを完全に置き換えることができますが、その逆はできません。たとえば、猫は動物であるとは言えますが、動物は猫であるとは言えません。このため、これを上向きと呼びます。変換。
3つの継承された特性:
1。子クラスには、親クラスの非プライベートプロパティとメソッドがあります。
2.サブクラスは独自の属性とメソッドを持つことができます。つまり、サブクラスは親クラスを拡張できます。
3.サブクラスは、独自の方法で親クラスのメソッドを実装できます。
もちろん、継承に関しては、コンストラクター、保護されたキーワード、アップキャストの3つが不可欠である必要があります。
コンストラクタ
サブクラスは、親クラスのプロパティとメソッドを継承できます。これらのプライベートに加えて、サブクラスが継承できないもう1つのもの、コンストラクターがあります。コンストラクターの場合、呼び出すことはできますが、継承することはできません。親クラスの構築メソッドを呼び出すには、super()を使用できます。
サブクラスの場合のみ、コンストラクターの正しい初期化が非常に重要です。これを保証するメソッドが1つしかない場合に限り、初期化を完了するために親クラスコンストラクターがコンストラクターで呼び出され、親クラスコンストラクターが実行されます。親クラスの初期化に必要なすべての機能。
保護されたキーワード
プライベートアクセス修飾子はカプセル化に最適ですが、これは理想的な世界にのみ基づいています。このような要件が必要になる場合があります。この世界から特定のものをできるだけ隠す必要がありますが、それでもクラスの子供を許可する必要があります。それらにアクセスします。現時点では、protectedを使用する必要があります。
保護されている場合、クラスユーザーに関する限り、彼はプライベートですが、サブクラスがこのクラスまたは同じパッケージ内にある他のクラスから継承している限り、彼はそれにアクセスできます。
上向きの変化
子クラスを親クラスに変換することは、一般にアップキャストと呼ばれます。アップキャストは特殊なタイプからより一般的なタイプへの変換であるため、常に安全であり、変更の可能性は属性とメソッドの喪失のみです。親クラスタイプの参照は、親クラスで定義されているすべてのプロパティとメソッドを呼び出すことができ、サブクラスにのみ存在するメソッドとプロパティには到達できません。
ポリモーフィズム
いわゆるポリモーフィズムとは、プログラムで定義された参照変数が指す特定の型を指し、参照変数を介して発行されるメソッド呼び出しは、プログラミング中には決定されませんが、プログラムの実行中に決定されます。変数はを指します。クラスのインスタンスオブジェクト、つまり参照変数によって発行されたメソッド呼び出しがクラスに実装されたメソッドであるメソッドは、プログラムの実行中にのみ決定できます。特定のクラスはプログラムの実行時に決定されるため、参照変数はソースコードを変更せずにさまざまな異なるクラス実装にバインドできます。その結果、参照によって呼び出される特定のメソッドはそれに応じて変更されます。つまり、変更されません。プログラムコードは、プログラムの実行時にバインドされた特定のコードを変更できるため、プログラムは複数の実行状態を選択できます。これはポリモーフィズムです。
ポリモーフィズムの実現
古典的なケース:http://blog.csdn.net/thinkGhoster/archive/2008/04/19/2307001.aspx。