Javaファイナルレビュークラッシュ(5)
アクセス制御権限
アクセス制御許可はカプセル化とも呼ばれます。これはオブジェクト指向の3つの主要な特性の1つです。以前は、これはアクセス修飾子ではないと考えていたため、学習プロセスでカプセル化を無視することがよくありました。すでに特徴?後で、信頼できる部下がバグを隠していると、それを知らないことを知りました。
実際、アクセス制御のアクセス許可の中核は1つのポイントです。つまり、必要なクラスにのみ表示されます。
Javaのメンバーに対するアクセス許可には、パブリック、保護、デフォルト、プライベートの4つのタイプがあります。それらの可視性は次のとおりです。
継承する
継承は、すべてのOOP(オブジェクト指向プログラミング)言語とJava言語の不可欠な部分です。クラスを作成する限り、そのクラスはObjectの親クラスから暗黙的に継承されますが、指定されていません。親クラスを明示的に指定すると、親クラスから継承し、親クラスはObjectクラスから継承します。
継承のキーワードはextendsです。上の図に示すように、extendsを使用して継承が指定されている場合、Fatherは親クラス、Sonはサブクラスであり、次のようにコードで表されます。
class Father{
}
class Son extends Father{
}
両方の当事者を継承することには、特定の共通の特徴があります
class Father{
public void feature(){
System. out. println("父亲的特征");}
}
}
class Son extends Father {
}
Sonが独自のメソッドを実装していない場合、デフォルトでは親クラスのfeatureメソッドが使用されます。サブクラスが独自の機能メソッドを実装している場合、それは親クラスの機能メソッドを書き換えることと同等です。これは、前述の書き換えでもあります。
ポリモーフィズム
ポリモーフィズムとは、同じ行動に複数の異なる症状があることを意味します。これは、クラスインスタンス(オブジェクト)の同じメソッドが、さまざまな状況でさまざまな表現を持つことを意味します。カプセル化と継承はポリモーフィズムの基礎です。つまり、ポリモーフィズムは単なる表現の形式です。
ポリモーフィズムを達成する方法は?ポリモーフィズムの実現には、3つの必要十分条件があります
- 継承する
- 親クラスメソッドをオーバーライドする
- 親クラス参照は子クラスオブジェクトを指します
たとえば、次のコード
public class Fruit {
int num;
public void eat(){
System. out.println( "eat Fruit");
}
}
public class Apple extends Fruit{
@Override
public void eat() {
super.num = 10;
System. out.println( "eat " + num + " Apple");
}
public static void main(String[] args) {
Fruit fruit = new Apple();
fruit.eat();
}
}
メインメソッドFruitfruit= new Apple()で非常に魔法のような場所を見つけることができます。Fruit型のオブジェクトは実際にはAppleオブジェクトの参照を指します。これは実際にはポリモーフィズムです->親クラスの参照はサブクラスオブジェクトを指します、Appleは
Fruitから継承し、eatメソッドをオーバーライドしたため、さまざまな状態の形式を表示できます。
組み合わせ
構成は実際には理解するのが難しくありません。オブジェクト参照を新しいクラスに配置することです。構成は、クラスの再利用性を向上させる方法でもあります。クラスにさらに拡張された関数を持たせたい場合は、より多くの構成を使用し、継承を少なくするために文を覚えておく必要があります。
public class SoccerPlayer {
private String name;
private Soccer soccer;
}
public class Soccer {
private String soccerName;
}
コードでは、SoccerPlayerはSoccerクラスを参照し、Soccerクラスを参照することにより、Soccerのプロパティとメソッドが呼び出されます。構成と継承には違いがあり、主な違いは次のとおりです。
継承と構成のどちらが良いか悪いかについての議論は、それぞれの長所と利点を発揮する限り、決定的ではありません。一般に、構成と継承は、一緒に使用できる良い兄弟のペアです。
演技
継承と構成に加えて、調査する価値のある別のリレーショナルモデルはエージェンシーと呼ばれます。プロキシの一般的な説明は、AがクラスBのメソッドを呼び出したいが、Aはそれを直接呼び出さないというものです。Aは独自のクラスにBオブジェクトのプロキシを作成し、プロキシはBのメソッドを呼び出します。 。たとえば、次のコード
public class Destination {
public void todo(){
System.out.println( "control. . .");
}
}
public class Device {
private String name;
private Destination destination;
private DeviceController deviceController;
public void control(Destination destination){
destination.todo();
}
}
public class DeviceController {
private Device name;
private Destination destination;
public void control(Destination destination){
destination.todo();
}
}
上向きの変換
アップトランスフォーメーションは、親クラスとサブクラスの関係を表します。実際、親クラスとサブクラスの間にはアップトランジションだけでなく、ダウントランジションもあり、変換後のスコープは異なります。
- アップキャスト:サブクラスオブジェクト(小さな範囲)は親クラスオブジェクト(大きな範囲)に変換されます。この変換は自動的に行われ、強制する必要はありません。
- ダウンキャスト:親クラスオブジェクト(広い範囲)を介してサブクラスオブジェクト(小さな範囲)をインスタンス化します。この変換は自動的に行われないため、指定する必要があります。
静的
staticはJavaのキーワードです。これは、staticを意味し、 staticはメンバー変数とメソッドを変更するために使用でき、staticはオブジェクトを作成せずにメソッド/変数を呼び出すために使用されます。
- staticで宣言されたメンバー変数は静的メンバー変数であり、クラス変数にもなります。クラス変数のライフサイクルはクラスと同じ
であり、アプリケーションの実行全体を通じて有効です。
static String name = "cxuan " ;
- staticで変更されたメソッドはstaticメソッドと呼ばれ、staticメソッドはクラスname.methodnameを使用して直接呼び出すことができます。静的メソッドにはオブジェクトに依存せずに直接アクセスできるため、静的メソッドにはこのキーワードはなく、インスタンス変数にはこのキーワードがあります。クラスの非静的メンバー変数および非静的メソッドは、静的メソッドではアクセスできません。
static void printMessage(){
System.out. println( " cxuan is writing the article");
}
staticには、プロパティとメソッドの変更に加えて、クラスの初期化操作に使用できる静的コードブロックの機能もあります。これにより、プログラムのパフォーマンスが向上します。
public class staicBlock {
static{
System. out.println( "I 'm A static code block ");
}
}
静的コードブロックはクラスのロード時に実行されるため、1回だけ実行する必要がある初期化操作は、多くの場合、静的コードブロックに配置されます。
最後の
finalはfinal、finalを意味し、クラス、プロパティ、およびメソッドを変更できます。
- クラスがファイナライズされると、クラスを継承できないことを示します。最終クラスのメンバー変数は必要に応じて最終にすることができますが、最終クラスのすべてのメンバーメソッドは暗黙的に最終メソッドとして指定されることに注意してください。
- メソッドfinalを変更する場合、メソッドはどのサブクラスでもオーバーライドできないことを示しているため、メソッドがサブクラスでオーバーライドされることを明示的に禁止する場合にのみ、メソッドをfinalにします。
- 最終的に変更される変数は2つのケースに分けられます。1つは基本データ型を変更してデータ型の値を変更できないことを示し、もう1つは参照型を変更して別のデータ型を指すことができないことを示します。初期化後のオブジェクト。